9

借用一些教程,我可以对 git repo 中的特定文件夹进行稀疏检出。

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

例如,假设我在此 repo 文件夹中的git-completion.bash, git-completion.tcsh, etc 脚本之后。contrib/completion

上面的 sparse-checkout 确实返回了我想要的文件夹,但它似乎有一个嵌套的文件结构:

git-completion/contrib/completion/git-completion.bash

是否可以像这样将文件拉入父目录?

git-completion/git-completion.bash
4

2 回答 2

4

你可以这样做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子目录中,所以习惯存储库布局可能会更好......

于 2013-11-07T15:30:01.857 回答
3

根据您要完成的工作,您有两种选择。如果您仍然希望能够跟踪对文件的更改,那么我会提交符号链接。如果您不关心本地更改,那么我会使用git archive.

提交符号链接

您可以将符号链接提交到您关心的文件,也可以使用备用签出来获取这些文件。

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 -

编辑:看起来github不支持git archive --remote. 如果有人使用允许它的不同托管服务,它仍然包含在下面。

带有 --remote 的 Git 存档

使用 git archive,您甚至可以直接从远程存储库下载更改,而无需先克隆存储库。缺点是您无法使用 Git 跟踪本地更改。

# 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 -

您现在将拥有当前目录中的文件。

于 2014-08-20T18:14:13.100 回答