如何以透明的方式从另一个 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
和各种重命名组合(mv
和git 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 分支并从另一个分支启动新分支?