如何从另一个Git仓库获取具有不同名称的子目录内容

时间:2014-09-12 07:47:08

标签: git

从另一个具有相同名称和相同路径的Git存储库获取子目录很容易,例如:

git remote add checklists https://github.com/janosgyerik/software-construction-notes
git fetch checklists
git checkout checklists/master checklists

示例远程存储库的根目录中有一个名为checklists的目录。最后一个checkout命令将获取该目录的内容并将其放在本地存储库的根目录中。

但是如果我想将目录放在其他地方?当然,在checkout之后,我可以使用git mv checklists my/specs/dir/checklists将目录移动到我想要的任何位置。但是,如果我在本地项目中已经有一个具有相同名称(可能不同的目的)的目录,这可能会很麻烦。我首先要把目录移开。有一个更清洁的方法,一步到位吗?像这样:

# grab the "checklists" dir and put its contents to my/specs/dir/checklists
git checkout checklists/master checklists my/specs/dir/checklists

顺便说一句,本地存储库是一个完全独立的项目。 software-construction-notes项目是一个带有一组注释的公共资源,我只是在多个项目中将其简化为克隆,以用作执行需求分析和体系结构设计的模板。这些独立项目不需要跟踪software-construction-notes项目的历史记录,我真的只需要文件的最新快照。

1 个答案:

答案 0 :(得分:1)

git read-tree --prefix=my/specs/dir checklists/master
git checkout-index -a

可能已经有用了。

它读取清单/主树并将其放入索引中,但在某个目录中。之后的checkout命令只是从索引更新您的工作目录,并基本上还原我的/ specs / dir / checklists中的新“待删除”文件。

如果你通常同意git会做什么,你可以通过

组合这两个命令
git read-tree -u --prefix=my/specs/dir checklists/master