2011-02-02 124 views
2

我有一个回购,我有一个主分支,最终将包含此应用程序的“核心”,以及将包含核心的客户端分支,以及公共包含所有资产,样式和前端视图。我知道这可以通过本地回购测试完成。但问题是我从一个完全建立的客户端应用程序开始,我想从主分支中分出几个文件夹,而不是将这些删除传播到其他分支,当我向外合并到客户分支时,更新到系统的核心。Git - 如何从一个分支中删除文件

所以,用更简单的术语,我如何从一个分支中删除文件,而不是在合并时将其删除到其他分支?

+2

国际海事组织你应该使用子模块来分离客户的具体信息(资产等)。手动处理这件事是对灾难的邀请。 – jweyrich 2011-02-02 14:33:05

+0

我向所有选项开放,请解释你的意思,也许更多的答案。 – jondavidjohn 2011-02-02 14:35:08

+0

我发布它作为真正的答案,所以我们可以讨论它,我会相应地更新。 – jweyrich 2011-02-02 14:48:41

回答

0

我最终刚刚为核心创建了一个新的存储库,并且重新构建了客户端分支,因为这个结构是事后的。所以我试图向后做。

1

您可以删除banch中的文件,但不是将您的分支合并到“Core”中,而是将删除的文件“core”banche嵌入到分支中。这样他们将始终保持同步,但是您删除的任何文件只会在指定的分支中被删除。

+0

是的,这是我需要修剪和清理客户特定材料的核心,但是,是的,我的最终目标只是从核心向外合并,向所有分支更新共同特征,以便公共资产不受影响。 – jondavidjohn 2011-02-02 14:28:55

2

国际海事组织你应该使用submodules分隔客户的具体信息(资产等)。手动处理这是对灾难的邀请

为每个客户端创建一个单独的存储库,并添加一个指向您的核心的子模块以及它们之间共享的任何其他内容。客户端之间不共享的代码不需要属于核心,也不需要属于其他共享子模块。这意味着与客户端相对应的每个(当前)分支必须成为单独的存储库。毕竟,他们彼此独立,这就是整个观点。

您将与这个仓库层次结束:

 core 
     /\ 
    /\ 
client1 client2 

UPDATE

重要:备份一切,所以你不惹上麻烦,如果出现错误。

所有这些都高度依赖于您的场景。但下面是我在非Windows系统描述了如何实现一个想法:

1)分裂您当前仓库到各种信息库(如:核心,客户端1,客户机程序等):

cp -R original_repo copy_repo 
cd copy_repo 
git checkout desired_branch 
git filter-branch --prune-empty --subdirectory-filter desired_directory -- --all 

也为每个客户端目录重复此操作。在这一步结束时,您将为每个部分(核心,客户端1,客户端2等)分别建立一个存储库。

2)作为子模块添加新的分割核心库到每个client1..clientN存储库:

git submodule add <path_for_core_alone> 
git submodule init # Add the submodule to .git/config 
git submodule update # Clone the core repository 

3)咖啡&利润。

0

我不是一个git用户,但一般来说,我相信你应该能够从trunk中删除文件,然后在从trunk到分支的合并过程中,撤销该更改(例如保留或恢复文件在工作副本中),然后提交合并。在未来的合并中,变更集应该被视为合并到分支中。