如何以透明的方式从另一个 git 分支获取目录的副本?

Posted

技术标签:

【中文标题】如何以透明的方式从另一个 git 分支获取目录的副本?【英文标题】:How to get a copy of a directory from another git branch in a transparent way? 【发布时间】:2011-08-12 08:57:15 【问题描述】:

如何在不 git 跟踪文件的情况下将目录从 git 分支复制到另一个

我的目标是为一个项目拥有不同的分支,并且能够将每个分支的一部分导入到单个目录中进行打包?每个分支都包含特定 Python 版本的代码,但包必须包含 所有 Python 版本的代码,因此在打包之前必须将所有版本特定分支的代码复制到主分支中。

这是一个例子:

git 控制的主分支目录包含:

uncertainties/

我要导入python-pre-2.5分支中包含的uncertainties/的版本,这样最终的目录是:

uncertainties/  # Should not be touched
uncertainties-py23/  # Imported from the python-pre-2.5 branch

关键点是我不希望git status 报告任何更改(如果一开始没有更改)。也就是说,目录导入过程对git来说应该是不可见的。

通过使用git checkout python-pre-2.5 -- uncertainties 和各种重命名组合(mvgit mv),我没有成功满足最后一个“git 透明度”要求。如何实现?

【问题讨论】:

【参考方案1】:

只需将uncertainties-py23/ 放入.gitignore

【讨论】:

谢谢!这几乎可以工作:git status 报告更改的文件。但是,git commit -a 没有找到任何要提交的文件。我怎样才能让git status 不报告更改的文件? uncertainties/ 中的文件被标记为正在修改并暂存等待提交,但 git 引用了它们导入的python-pre-2.5 版本;同时,git status 还报告了对原始(主分支)文件的修改,以及未暂存的更改。 git diff 报告更改(而git commit -a 不想提交任何内容!)。 啊,我认为问题在于git checkout 让 git 认为它现在在那个分支上。见***.com/questions/160608/…【参考方案2】:

来自主人,

git archive python-pre-2.5 uncertanties > uncertanties-py23.tar
mkdir uncertainties-py23
tar xf uncertanties-py23.tar --strip-components=1 -C uncertanties-py23

然后添加uncertanties-*/ 或类似你的.gitignore。

【讨论】:

git archive 命令很高兴知道:谢谢!我实际上做了tar -C /tmp -xf uncertainties-py23.tar; mv /tmp/uncertainties uncertainties-py23(不需要mkdir--strip-components=1)。 PS:git archive --output uncertainties-py23.tar … 也是一种替代方案,它不依赖于 shell 如何处理文件破坏(> 在 sh 中,>! 是 zsh,...)。

以上是关于如何以透明的方式从另一个 git 分支获取目录的副本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从远程仓库中的 master 删除 GIT 分支并从另一个分支启动新分支?

如何获取按最近提交排序的 Git 分支列表?

text [GiT]完全从另一个分支替换git中的master分支

Git的基本命令与Tortoise工具简化Git操作的使用

git 从远程仓库获取所有分支

如何将远程分支添加到我的本地仓库?