Как можно скопировать только определенные файлы из репозитория на GitHub, а не все сразу?

В репозитории по каким-то причинам был закоммичен каталог node_modules, который занимает значительный объем, составляя три четверти размера всей программы. Мне было бы удобнее скачать его самостоятельно через npm. Однако, я не могу скачать весь репозиторий, так как загрузка zip-архива занимает слишком много времени.
  • 19 ноября 2024 г. 16:53
Ответы на вопрос 2
Чтобы скопировать определенные файлы или директории из репозитория на GitHub, вы можете использовать следующие методы:

### 1. Клонирование с помощью git sparse-checkout (для Git 2.25 и новее)

Этот метод позволяет вам скачать только определенные файлы или папки из репозитория.

1. **Клонируйте репозиторий с пустым рабочим деревом**:
   ```bash
   git clone --no-checkout <URL репозитория>
   ```

2. **Перейдите в директорию репозитория**:
   ```bash
   cd <имя_репозитория>
   ```

3. **Включите sparse-checkout**:
   ```bash
   git sparse-checkout init
   ```

4. **Добавьте файлы или папки, которые хотите скачать**:
   ```bash
   git sparse-checkout set <путь_к_файлу_или_папке>
   ```

   Например, если вы хотите скачать только папку `src`, выполните:
   ```bash
   git sparse-checkout set src
   ```

5. **Теперь выполните команду checkout**:
   ```bash
   git checkout <ветка>
   ```

### 2. Использование GitHub веб-интерфейса

Вы также можете вручную скачать отдельные файлы через веб-интерфейс GitHub:

1. Перейдите на страницу нужного файла в репозитории.
2. Нажмите на кнопку "Raw" (Сырой), чтобы открыть файл.
3. Кликните правой кнопкой мыши и выберите "Сохранить как...", чтобы сохранить файл на локальный диск.

Этот способ подходит, если вам нужно скачать небольшой объем файлов.

### 3. Использование утилит командной строки

Если у вас есть установленные утилиты `wget` или `curl`, вы можете скачать отдельные файлы с помощью команды:

```bash
wget <URL_ссылка_на_файл>
```

или

```bash
curl -O <URL_ссылка_на_файл>
```

### 4. Использование GitHub API (для опытных пользователей)

Вы можете использовать GitHub API для получения определенных файлов, но это может быть сложнее и требует некоторых знание REST API.

Если вы хотите избежать загрузки большого каталога `node_modules`, лучшим вариантом будет использование `sparse-checkout`. Это эффективный способ скачивания только нужных компонентов репозитория.
При клонировании скачиваются не файлы, а коммиты. А уже потом содержимое коммита распаковывается в рабочий каталог в виде файлов. Вы можете в рабочий каталог вытащить не все файлы, но при клонировании в репозиторий всё равно скачивается полное состояние проекта. 

Тут неплохо бы связаться с админами репозитория и попросить вычистить мусор оттуда, пока ситуация не усугубилась.

А если вам сейчас не терпится скачать проект, то можно вытянуть отдельный коммит из старой истории, когда лишней папки там ещё не было. Если вы узнаете хэш, то скачать коммит в пустую папку можно так
git init
git fetch --depth=1 <repository_url> <commit_hash>
git checkout FETCH_HEAD


Хотя если папка там была изначально, то никак
Похожие вопросы