Git клон, игнорируя каталог - программирование
Подтвердить что ты не робот

Git клон, игнорируя каталог

Я пытаюсь проверить что-то на установке wordpress. При этом я бы хотел быстро скопировать репо. Однако каталог загрузки (wp-content/uploads) является массивным, поэтому я хотел бы проигнорировать его.

Примечание. Я не хочу, чтобы .gitignore этот каталог все время, только для этого сценария.

В принципе, мне нужна команда вроде этого псевдокода: git clone --ignore wp-content/uploads.

Лучший способ добавить этот каталог в .gitignore, клон, а затем вернуть .gitignore? Или есть лучший метод?

4b9b3361

Ответ 1

git clone всегда будет клонировать полный репозиторий *, включая все предыдущие коммиты, когда-либо добавляемые в репозиторий. Поэтому, даже если вы временно удалите файлы и затем клонируете их, вы все равно получите более старые версии, содержащие эти файлы.

Кроме того, просто редактирование .gitignore не удалит отслеживаемые файлы из репозитория, даже если они обычно игнорируются.

Нет, нет возможности пропустить определенную папку во время клонирования.

* Можно ограничить количество коммитов, полученных во время клонирования, но это не сделает репозиторий очень удобным.

Ответ 2

Немного поздно для вечеринки, но: Вам не нужна редкая проверка?

mkdir <repo> && cd <repo>
git init
git remote add –f <name> <url>

Включить разреженную проверку:

git config core.sparsecheckout true

Настройте разрешенную проверку, указав нужные вам деревья в .git/info/sparse-checkout:

echo some/dir/ >> .git/info/sparse-checkout
echo another/sub/tree >> .git/info/sparse-checkout

Проверка с пульта дистанционного управления:

git pull <remote> <branch>

Подробнее см. http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/.

Ответ 3

вы можете указать глубину для клонирования (--depth=1, чтобы получить только 1 фиксацию). Возможно, вы захотите настроить ветвь с отсутствующим каталогом и затем клонировать только с глубиной. Поскольку git основан на снимке, легко исключить часть коммита при клонировании. Это самое близкое к тому, что вы хотите.

Если у вас есть полный контроль над этим репо, вы можете захотеть создать подмодуль этого каталога и обновить подмодуль только после того, как захотите ввести эту часть.

Ответ 4

На сервере:

 git checkout master^0    # the ^0 checks out the commit itself, not the branch
 git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD
 git checkout -b filtered

(фильтр-ветвь на большом проекте здесь генерирует новую историю со скоростью около 2-3 комет в секунду)

Затем, где угодно,

 git init
 git remote add gimme your://repo/path
 git fetch gimme filtered

изменить: исправлены синтаксические ошибки в соответствии с http://git-scm.com/docs/git-filter-branch