【问题标题】:git branches sharing a common set of filesgit 分支共享一组通用文件
【发布时间】:2021-11-24 05:54:55
【问题描述】:

我正在使用 git 进行版本控制,这是一个软件项目,它包含一个很大的通用部分以及一些根据特定目标机器而更改的文件:

+project-folder
|-cnc_sources
|  |-...(lot of common files)
|  |-specialized.cnc
|-plc_sources
|  |-...(lot of common files)
|  |-specialized.plclib
|-config
|  |-specialized.param

由于我支持三种不同类型的机器,我目前的解决方案是一个包含三个不同分支的单一存储库,每台机器一个分支,共享一个很大的公共部分,除了少数专用文件。

我在本地克隆每台机器/分支的 repo(这对于测试和部署软件非常方便),但是这个解决方案不能很好地扩展,因为我必须手动保持所有分支的公共部分的同步复制所有其他工作文件夹中文件的最新版本并在那里提交。

我想知道这种手工工作是否可以避免。我也觉得有些地方不对劲:公共文件在分支之间有不同的历史和变更集,有时我觉得很混乱。

供应商 IDE 需要源代码树中某个位置的文件,因此我无法将公共部分收集到单独的文件夹中(例如创建子存储库)。

我的需要是让 N 个分支共享一组分散在源代码树中的公共文件(无法收集它们),但由于我是一个 git 新手,我不知道关于我的用例的最佳实践,所以我想知道有经验的用户会在我的情况下做什么。

【问题讨论】:

  • 在我修改(或删除)我的答案之前,我想了解您如何同步公共部分。能详细解释一下吗?
  • 您是指git branch 意义上的“分支”吗?还是作为工作树中的三个并行文件夹?
  • @eftshift0 当然,我必须解释得更好(感谢您的耐心等待)。一旦我在一个分支中开发,我必须将所有更改的公共文件移植到其他两个分支中,并在那里提交更改。我这样做有时将文件直接复制到其他分支的工作文件夹中,有时在工作文件夹上使用比较实用程序。我想知道是否有一个聪明的方法来管理这个。
  • @RichardSmith 我的意思是git branch。我有三个并行文件夹,每个文件夹都指向不同的分支。
  • 分支,在 Git 中是无关紧要的。只有提交很重要。提交包含文件(作为快照、la tar 或 zip 存档)。提交还包含元数据,这些元数据形成了一个图(一个 DAG)。这就是 Git 中的全部内容:提交包含文件。分支名称,在它们存在的范围内,只是为了帮助你(和 Git)找到特定的提交。只要仍然可以找到所有提交,您就可以删除所有分支名称而不进行任何更改(这通常需要一些其他名称,例如标签或远程跟踪名称)。

标签: git version-control branch


【解决方案1】:

我认为您没有正确执行此操作。如果我是你,我会有一个main 分支(或者common,也许),在那里你有共享的项目文件......在项目的根目录或名为common 或类似的目录中那。如果它是共享的东西,还有config dir。这是您继续处理公共资源的分支。

然后,从这个分支开始为每台机器进行自定义开发......所以,比如说......cnc 分支是从common 分支开始的。你在那里添加specialized.cnc 并提交。你回到common,专用文件不见了。你从这里开始plc 分支。在此处添加specialized.plclib。添加并提交。现在,如果你切换到cnc,你会得到cnc的文件,你回到plp,你会得到plc的文件。生活是美好的...现在您可以在单独的分支上工作并挑选樱桃...当您在公共分支上工作时,您可以合并到特定于机器的分支中。

工作流程

现在,如果您认为您只是不能common 上工作,因为该项目需要其他分支的细节才能构建/测试,那么它就会成为一个问题工作流程

假设您在 cnc 上并更改了几个常用文件并更改了 cnc-proper 文件。你如何移动这些变化?嗯,一个简单的方法是这样的:

git add the-specific-file-for-cnc
git commit -m "cnc: blah blah"
# at this point all the changes you have pending are for common files
# then you should be able to checkout common and commit there
git checkout common
git add the-common-files
git commit -m "common: blahblah"

好的,所以你在不同的分支中提交了。您如何将您在common 中所做的更改恢复到您需要它们的cnc?很简单:

git checkout cnc
git merge common -m "cnc: merging changes from common"

plc 也是如此

git checkout plc
git merge common -m "plc: merging changes from common"

这绝不是处理它的唯一方法,但至少这应该让您了解您可能实施的各种技巧。

【讨论】:

  • 我不太确定(可能我的 git 知识太基础了)。当我开发时,我需要在其相对位置的所有文件(通用和专用)来构建和运行测试。我会看看main/common 分支的有趣想法;如果您有空闲时间,我会对您想到的工作流程(git 命令)感兴趣。
  • 让我在 workflow 方面为问题添加更多信息
猜你喜欢
  • 2011-09-08
  • 2019-02-07
  • 2021-08-24
  • 2011-03-16
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多