我有一个包含子目录的git存储库。示例dirA / dirB。
有没有办法在Unix服务器上执行git clone
只从子目录(dirB)中提取文件?
还有除clone之外的其他一些git命令吗?
如何git特定文件?
答案 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)
答案 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界面,您可以导航到您的子目录并获取它。