Git - 如何从单个分支中删除文件

时间:2011-02-02 14:14:44

标签: git version-control versioning

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

因此,用更简单的术语来说,如何在合并时将一个文件从一个分支中删除而不将其删除到其他分支?

4 个答案:

答案 0 :(得分:2)

IMO您应该使用submodules来分隔客户详细信息(资产等)。手动处理这是灾难的邀请

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

您将最终获得此存储库层次结构:

       core
        /\
       /  \
client1    client2

<强>更新

重要提示:备份所有内容,以便在出现问题时不会遇到麻烦。

所有这些都高度依赖于您的场景。但以下是如何完成我在非Windows系统中描述的内容的想法:

1)将当前存储库拆分为各种存储库(例如:core,client1,client2等):

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

也为每个客户端目录重复此操作。在此步骤结束时,您将为每个部分(核心,client1,client2等)提供单独的存储库。

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)咖啡&amp;利润。

答案 1 :(得分:1)

您可以在banch中删除该文件,但不是将您的分支合并到“Core”中,而是可以使用已删除的文件将“核心”禁止内容转移到您的分支中。这样它们将始终保持同步,但您删除的任何文件只会在指定的分支中删除。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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