Редкие ЖКТ извлечение файлов в папку
Заимствуя из нескольких учебников,я могу сделать редкую проверку определенной папки в репо git.
mkdir git-completion && cd git-completion
git init
git remote add –f origin https://github.com/git/git.git
git config core.sparsecheckout true
echo contrib/completion/ >> .git/info/sparse-checkout
git pull origin master
Например, предположим, что я после git-completion.bash
, git-completion.tcsh
, скрипты etc, находящиеся в папке contrib/completion
данного РЕПО.
Приведенный выше sparse-checkout возвращает мне нужную папку, но она, похоже, имеет вложенную файловую структуру:
git-completion/contrib/completion/git-completion.bash
Можно ли вытянуть файлы вместо этого в родительский каталог, как это делается?
git-completion/git-completion.bash
2 ответа:
Вы можете сделать это с помощью
git show
:git show <revision>:path/to/file.txt > different/path/to/otherfile.txt
В вашем конкретном случае:
git show HEAD:git-completion/contrib/completion/git-completion.bash > git-completion/git-completion.bash
Повторите для каждого файла, который вы хотите извлечь. Хотя, на самом деле, причина для подкаталогов, я думаю, заключается в том, что, когда они упаковываются в релиз
git
, они помещаются в подкаталогcontrib/completion
, поэтому, возможно, было бы лучше привыкнуть к макету репозитория...
В зависимости от того, чего вы пытаетесь достичь, у вас есть два варианта. Если вы хотите иметь возможность отслеживать изменения в файлах по-прежнему, то я бы зафиксировал символические ссылки. Если вас не волнуют локальные изменения, то я бы использовал
git archive
.Фиксация символьных ссылок
Вы можете фиксировать символические ссылки на файлы, которые вас интересуют, а также использовать spare checkout для их получения.
ln -s contrib/completion/git-completion.bash git-completion.bash git add git-completion.bash
Это позволит вам редактировать файлы и фиксировать изменения в них по-прежнему.
Архив Git
Это будет просто извлекать содержимое, которое вы ищете. Изменения не будут отслеживаться в репозитории.
# generic git archive <revision>:<path> | tar -xf - #specific to your example git clone --bare https://github.com/git/git.git ~/git-completion-bare mkdir git-completion && cd git-completion git archive --remote ~/git-completion-bare master:contrib/completion/ | tar -xf -
Edit: похоже, что
github
не поддерживаетgit archive --remote
. Он все еще включен ниже, если кто-то использует другой хостинг, который позволяет это.Архив Git с --remote
Используя git archive, вы даже можете загрузить изменения непосредственно из удаленного репозитория, не клонируя его предварительно. Недостатком является то, что вы не можете отслеживать локальные изменения с помощью Мерзавец.
# General form git archive --remote <url> <revision>:<path> | tar -xf - # your example git archive --remote https://github.com/git/git.git master:contrib/completion/ | tar -xf -
Теперь у вас будут файлы в текущем каталоге.