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

Evg*_*eny 24 git merge dvcs

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

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

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

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

有没有办法以这种方式设置git?我很想找到一个自动化解决方案:) - 这样可以像往常一样进行合并.


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

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

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

file1      merge=keepmine
path/file2     merge=keepmine
Run Code Online (Sandbox Code Playgroud)

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

从私人分支到公共分支合并时,我通常会这样做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
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 14

为了安全起见,您可以为这些私有文件添加git attribute(参见此处的示例).

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