Редкие ЖКТ извлечение файлов в папку


Заимствуя из нескольких учебников,я могу сделать редкую проверку определенной папки в репо 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 8

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 -

Теперь у вас будут файлы в текущем каталоге.