我正在开发一个Lua库,其中包括代码生成和验证等-项目的许多开发代码是用另一种语言编写的。
我想有一个分支库和其他休息的代码。图书馆不应该知道它依赖于什么--首先是为了用户的方便。如果用户阅读文档,他们应该能够找到REST代码--它不是私有的。
分支应同步:为了避免像“在项目中写了一些代码,但它不影响库”这样的错误-忘记更新,为了方便CI,为了清理git历史。
当前项目是master分支根目录下的两个文件夹。我想在不中断同步的情况下分离它们。我能在不使用单独的存储库的情况下实现这一点吗?或者使用单独的回收站适合这里,它的方便?参考文档或具有类似系统的一些项目可能就足够了。
同一个repo的两个分支在这里似乎不合适--有必要同时在两个部分上工作。我不想使用单独的git仓库--那么我需要使用单独的git历史,它们应该是相同的,管理多个仓库似乎很不方便--但我没有看到其他选择。此外,我不知道,如何正确地同步它们,谷歌提供的结果“如何强制回购有相同的内容”-这不是我想要的。
Git with separated development and releases是关于如何在私人开发,然后推到公共-我需要两者并行。其余的似乎与我无关。
在我所知道的方法中,我不喜欢的主要事情是大多数更改都需要多次提交-每个分支/仓库一次。重复(例如完全相同的消息)总是导致错误。可以避免吗?
我看过提问规则,好像,我的问题是开放的,是禁止的。另外,它看起来对其他人没有帮助(问题,答案对像我这样不知道一些git可能性的人很有帮助)。我应该删除这个吗?
4条答案
按热度按时间ssgvzors1#
我承认我不知道所有最新的趋势,但直觉上,我会有一个名为集成的分支或类似的分支,并有两个分支-一个用于库开发,另一个用于REST代码,以便他们都可以将更改推到集成分支。如果您有多个开发人员,他们可以从各自的专业库或REST分支。
h79rfbju2#
您可以将单独的历史记录与主历史记录一起保存在一个存储库中。最简单的是根本不使用
git submodule
助手,它是一个用于在单独的存储库中处理单独的历史记录的工具包,但是绕过它会弹出一些警告,并且使它们静音的样板也很容易,所以我在这里包含了它。假设您的支持代码在
support
中。将support
代码拆分成一个合并的子模块的最快方法是,从一个干净的检出:分割历史的新克隆将有一个空的
support
目录,您可以填充它在较旧和较新结构的提交之间切换的最简单方法是为它们创建单独的工作树,可以使用工作树添加或本地克隆。
如果你的支持代码中有足够的历史记录,你想把整个仓库转换成新的结构,请参阅here,这是我在构建
git worktree
命令之前编写的。uxhixvfz3#
看看
git subtree
。它不能满足你所有的需求,但我认为这是一个选择。git subtree
似乎已弃用,因为在线docs中找不到其手册。命令git subtree
仍然可用,并且可以按照其手册中的描述工作,我们可以通过git subtree --help
找到。让我们假设您当前的仓库有两个文件夹
lib/
和src/
,并且它已经有一个现有的分支main
。我们可以将
main
拆分为两个独立的分支,lib_split
用于lib/
,src_split
用于src/
。现在我们有三个不同的和不相关的分支。在
main
上,目录结构类似于在
lib_split
上在
src_slit
上此外,我们还可以介绍另一个您可以使用的分支。我们将其命名为
main_merge
,并从main
创建它。这个新分支用于组合
lib_split
和src_split
。如果
main
被更新,我们也可以更新lib_split
和src_split
。您可以在同一个存储库或不同的存储库中维护4个分支,或者前3个分支,或者更多分支。这取决于您的工作流程。
rkttyhzu4#
在阅读了答案之后,我得出的结论是,我需要单独的地方(分支)库,这将自动更新到最新的开发分支-正如所指出的,我想要一个单一的提交更新单独的历史。
所以我将使用一些脚本(可能在CI中)。它将为用户生成单独的分支(这就是这个问题出现的原因),我不需要为同步而烦恼--我们当前的工作流根本不会改变(使用CI,没有人需要在本地使用脚本)。
我宁愿避免副本,但子树/子模块(没有其他建议)不会解决我的问题,如果我设法正确理解。他们假设,最终的结果库,依赖于开发文件,将包含开发文件,即使它不是直接的。工作树可以通过使用一个分支用于仅限开发人员的文件和另一个用于仅限库的文件来帮助避免复制,但它的工作更复杂(并且在不影响工作流的情况下解决问题的意外可能性看起来是一个非常重要的好处)。谢谢你的回答,他们帮助我解决了我的问题。