使用git仅克隆一个子目录

时间:2012-08-06 19:12:22

标签: git

我有一个包含子目录的git存储库。示例dirA / dirB。 有没有办法在Unix服务器上执行git clone只从子目录(dirB)中提取文件?

还有除clone之外的其他一些git命令吗?

如何git特定文件?

6 个答案:

答案 0 :(得分:30)

假设您的项目位于名为project的目录中,并且您只想要那些触及project/dirB的提交。

然后:

git clone project/ subproject/
cd subproject
git filter-branch --prune-empty --subdirectory-filter dirB HEAD 

subproject现在将包含触及dirB的git历史记录。

答案 1 :(得分:18)

Cf https://www.kernel.org/pub/software/scm/git/docs/git-archive.html

使用shell命令:

git archive --remote=<repo_url> <branch> <path> | tar xvf -

答案 2 :(得分:2)

如果您只想克隆存储库的部分内容,则应该查看git submodules

子目录由特定的git存储库管理,并在主存储库中作为子模块引用。

克隆主存储库时,不会自动克隆子模块。

答案 3 :(得分:1)

我想分享一个解决方法。您可以克隆整个仓库,然后为子目录创建一个symulink:

mkdir <repo_dir>
cd <repo_dir>
git clone <repo_url>
ln -s <sub_dir> <your_location_where_you_want_to_checkout_sub_dir>

同样,这不是解决方案 - 只是一种解决方法。您仍将克隆整个仓库,并且只能从中提取更改。但是,这在我的某些情况下很有用。

答案 4 :(得分:1)

这不是真正的克隆,但如果你只是想让一个项目的一部分开始一个新的回购,请进入你的回购和

git archive master <subdir> | tar -x -C /somewhere/else

然后去/ somewhere / else并在那里开始一个新的回购。

答案 5 :(得分:0)

Git在存储库级别上工作。您将无法仅选择子目录。如果您感兴趣的存储库具有Web界面,您可以导航到您的子目录并获取它。