Git:合并公共和私有分支,同时保持两个分支中的某些文件完好无损

StackOverflow https://stackoverflow.com/questions/1807036

  •  05-07-2019
  •  | 
  •  

我在这里读了几个git问题,但找不到这个问题的答案:

我有一个公共和私人分支机构,我希望允许某些文件发散。

这些是包含密码和本地自定义的配置文件。

我确实希望能够以两种方式合并分支:从私有到公共和后退,但我不希望自动合并这些特定文件。

有没有办法以这种方式设置git?我很想找到一个自动化解决方案:) - 这样可以照常完成合并。


编辑:这是适用于我的解决方案(感谢VonC对gitattribute的建议)

对我来说唯一意想不到的事情就是“合并保护”。只有在文件在两个分支中分歧后才开始工作,而不是在应用以下配置后立即开始工作

.gitattributes(如果你想分享这个,可以使用git跟踪)或.git / info / attributes:

file1      merge=keepmine
path/file2     merge=keepmine

keepmine是命名的自定义合并管理器,它只是一个无操作命令,而不是所选文件的内部合并驱动程序,它在下面设置

当从私有分支合并到公共分支时,我通常会执行 git merge --squash private 。这样私人编辑就不会进入公共分支的git历史。

的.git /配置:

#public repository
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = <public repo git url> 

#private repository
#has to set up with git init and populated with the initial commit to branch mybranch
[remote "private"]
    push = +:
    url = /path/to/local/private/repo 
[merge "keepmine"]
    name = dont_merge_selected_files
    driver = echo %O %A %B 
[branch "master"]
    remote = origin
    merge = refs/heads/master 

#private branch settings
[branch "mybranch"]
    remote = private
    merge = refs/heads/mybranch

如果有办法改善这一点,请发表评论

有帮助吗?

解决方案

为安全起见,您可以添加 git attribute (参见这里举例说明)这些私人文件。

这样,您可以定义一个脚本(“合并管理器”),如果在公共分支上合并,将确保包含私有信息的文件将保持为空(或使用公共内容),同时保留其本地内容合并到私人分支。
这意味着您可以在不考虑该文件的情况下合并/变基。

其他提示

一种方法是使用 git rebase 。通过将您的私有更改保留在 master 的末尾,您可以将公共内容提交到 master 分支(或者您选择的工作分支) ,然后在您想要更新时将您的私有分支重新绑定到master。

另一种处理方法是将模板配置文件保存在Git中,例如 frobozz.config.template 。在工作目录中,将 frobozz.config.template 复制到(unversioned) frobozz.config 并进行修改。如果您需要备份本地更改,请务必备份工作目录。

只有在检测到合并冲突时才会出现这种情况。在分支之间来回合并文件会被覆盖。除非我设置错误。当然这是在Windows上的msysgit git版本1.6.5.1.1367。

将密码置于版本控制之下是最糟糕的想法。你需要CVS而不是git来处理单独的文件。和许多其他现代DVCS一样使用整个树,而不是使用单独的文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top