在两个不同的分支中有两个不同的同一文件副本

时间:2016-04-21 19:22:19

标签: git diff git-branch

你知道我怎样才能在git的两个不同分支中拥有同一个文件的两个不同副本?

假设我有一个名为 public void startServerConnection(){ try{ serverSocket = new ServerSocket(portNumber); while(true){ System.out.println("Waiting for a connection..."); Socket clientSocket = serverSocket.accept(); System.out.println("Connection established on port: "+clientSocket.getLocalPort()); ClientConnection clientConnection = new ClientConnection(clientSocket); Thread thread = new Thread(clientConnection); thread.start(); } } catch(Exception e){ e.printStackTrace(); return; } } 的文件 我想要实现的是在master分支中的dev分支中有一个这个文件的副本。

重要的是gitignored中不能忽略文件。

1 个答案:

答案 0 :(得分:1)

您可以查看2个分支机构。修改文件并将它们提交给每个分支。

如果要合并分支并在每个分支中包含2个单独的文件(不同的内容),请将更改提交到分支,然后在.gitattributed设置所需的文件以始终抓住我们的文件 - 这将导致此文件永远不会被覆盖

阅读所有相关内容并在此处进行设置:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Merge-Strategies

  

您还可以使用Git属性告诉Git对项目中的特定文件使用不同的合并策略

     

一个非常有用的选择是告诉Git 在发生冲突时不尝试合并特定文件,而是将合并的一方用于其他人的。

     

如果您的项目中的某个分支已经分歧或是专门的,但您希望能够将更改合并到其中,并且您想要忽略某些文件,这将非常有用。

config_file merge=ours

正如他在评论中提到的@torec

  

小心我认为git中的错误:如果git能够平凡合并文件,它就不会运行自定义合并驱动程序。在尝试三向合并之前,Git总是先尝试一个简单的双向合并

另一个选择是使用smudge/clear过滤器来确保您拥有正确的文件。

<强> Smudge

阅读所有相关内容并在此处进行设置:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes

  

事实证明,您可以编写自己的过滤器,以便在提交/结帐上的文件中进行替换。

     

这些称为cleansmudge过滤器。

     

.gitattributes文件中,您可以为特定路径设置过滤器,然后设置将在检出文件之前处理文件的脚本(“涂抹”,见图8-2)和之前的文件他们上演了(“干净”,见图8-3)。

     

这些过滤器可以设置为做各种有趣的事情。

enter image description here