我有一个包含子目录的 git 存储库。示例 dirA/dirB。有没有办法git clone
在 Unix 服务器上只从子目录(dirB)中提取文件?
除了克隆之外,还有其他 git 命令可以执行此操作吗?
我如何 git 一个特定的文件?
我有一个包含子目录的 git 存储库。示例 dirA/dirB。有没有办法git clone
在 Unix 服务器上只从子目录(dirB)中提取文件?
除了克隆之外,还有其他 git 命令可以执行此操作吗?
我如何 git 一个特定的文件?
假设您的项目位于名为 的目录中project
,并且您只需要那些涉及的提交project/dirB
。
然后:
git clone project/ subproject/
cd subproject
git filter-branch --prune-empty --subdirectory-filter dirB HEAD
subproject
现在将包含涉及的 git 历史记录dirB
。
参见https://www.kernel.org/pub/software/scm/git/docs/git-archive.html
使用 shell 命令:
git archive --remote=<repo_url> <branch> <path> | tar xvf -
这不是真正的克隆,但如果你只是想要一个项目的一部分来开始一个新的 repo,进入你的 repo 并
git archive master <subdir> | tar -x -C /somewhere/else
然后去 /somewhere/else 并在那里开始一个新的回购。
我想分享一个解决方法。您可以克隆整个 repo,然后为子目录创建一个符号链接:
mkdir <repo_dir>
cd <repo_dir>
git clone <repo_url>
ln -s <sub_dir> <your_location_where_you_want_to_checkout_sub_dir>
同样,这不是解决方案 - 只是一种解决方法。您仍将克隆整个 repo,并且只能从 . 但是,这在我的某些情况下很有用。
Git 在存储库级别上工作。您将不能只选择一个子目录。如果您感兴趣的存储库有一个 Web 界面,您可能能够导航到您的子目录并获取它。