2017-09-13 95 views
3

我有几个存储库,我总是必须合并一个core存储库。 core存储库在每个存储库中均设置为remote存储库。将git仓库中的所有现有文件替换为除.gitignore中的文件之外的其他远程分支。

一般情况下,我的工作流程,以更新资料库是这样的:

git reset --hard origin/master 
git pull origin master 
git fetch core master 

我那么做了git merge --squash core/master,推动资源库回remote之前解决任何冲突。

这是好的,但它是一个有点多余,因为除了在.gitignore文件每个仓库的一切,一切都在这些库中,应当在技术上是一样的core库。

由于库的数量扩大,我想知道拉core分支到这些库的更有效的方式将给予什么,我需要更换,除了特别是在.gitignore为每一个提到的那些所有现有文件同时保持git历史和日志的完整性。

+0

不能使用[子模块](https://git-scm.com/docs/git-submodule)? –

+0

你想'git checkout分支 - 文件...'也许? – o11c

+0

Git正在项目级别工作。除非您使用子模块,否则无法为特定文件“选择”备用远程设备。 –

回答

0

你可以用git和bash的组合来实现。我写了一个示例脚本来展示如何完成它。你可以随时修改它并使其更好。我也提供了一些解释。该文件被称为adder.sh

#!/bin/bash 
# $1 -> Files from the branch you want (core) 
# $2 -> Branch you want to merge into (master) 

git checkout $2 
git diff --name-status $1..$2 | grep '^\(D\|M\)\s*' | cut -f2 > ~/.dummy 
git checkout $1 -- $(cat ~/.dummy) 
git add . 

要调用它,只需使用$ sh adder.sh core master。在此之后,core分支中的所有新添加和修改的文件都将添加到master回购。使用git状态,您可以看到新增内容,然后进行相应的提交和推送。

$ git commit -m "Skipping Conflicts" 
$ git push 

一些解释它是如何工作的:

$ git diff --name-status master..core 

产生以下输出:

M  public/stylesheets/main.css    # Modified 
D  public/templates/createUser.html   # Present in core branch and not master (new file) 
A  public/templates/dashboard.html   # Present in master and not in the core branch (don't touch) 

所以写一个简单的正则表达式来只选择修改,新文件和将其修改为适当的格式,然后将其存储在临时文件中。

$ cat ~/.dummy 

public/templates/createUser.html 
public/stylesheets/main.css 

然后我们需要将这些文件添加到我们当前的分支,所以我们使用git checkout。有关如何使用git checkout,请参阅this answer


还有另一种方法可以做到这一点。官方的方式,使用git rerere。从the man page

在工作流程采用相对长期的特性分支,开发人员有时需要一遍又一遍地解决同样的冲突,直到话题分行完成(或者合并到“释放”分支,或发送并接受上游)。

此命令通过记录初始手动合并冲突automerge结果和相应的手的决心的结果,以及应用先前记录的手的分辨率为它们相应的automerge结果有助于这个过程中的显影剂。

注意:您需要设置,以使该命令rerere.enabled配置变量。

This article给出了一个体面的命令及其使用案例的概述。

+0

除非我做错了,否则这不会保留原始存储库的git历史记录。它用核心存储库覆盖它。 –

+0

@KamranKhan,是的,这是正确的。你应该冒险的第二个选项,如果你想保持提交历史 – TheChetan

+0

@KamranKhan,我今天通过git合并文档,我发现[这个答案](https://stackoverflow.com/a/13307342/4110233)上所以,看看它是否可以帮助你。 – TheChetan

相关问题