拆分git仓库以同时处理两个项目
我正在开发一个框架用于我的项目; 然而,框架的开发可以在没有上下文的情况下实现:即,我需要开始在实际项目中使用它,并具体查看我需要添加,修复或调整的内容 (也许可以在测试环境中工作的内容不要“不适合现实生活中的情况,或者某些事情没有意义,或者我想添加功能)。
首先,由于框架显然是一项正在进行的工作,我需要确保它作为其不同部分在Real-life项目中保持更新,因此我可以返回到Framework,编辑它,提交并返回到现实生活中的项目更新框架,继续与项目合作。
其次,我实际上喜欢一种在不进行项目切换的情况下实现这一目标的方法。 我的意思是我希望能够在Real-life项目中编辑Framework并将这些提交推送到Framework存储库。
现在,我知道实现这个的工具很可能是git submodule
和git subtree
,但是它们都很混乱。 尤其是,子模块似乎更倾向于只读方式(例如,始终更新库):这将满足我的第一个要求,但不是第二个要求。
任何关于如何使用Git实现这一点的指针以及工作流程的外观如何?
这两种方法中的任何一种都会为你服务。
每个人都可以允许你需要,编辑项目并将特定内容推送到单独的存储库。
这两种方法也会产生大量的开销,以保持两个项目的运行。
关于你提到的两点:
使用子模块,您可以在其他存储库的文件夹中拥有一个存储库。 外层(Real-Life)会将一个文件保存在子模块(Framework)存储库的位置以及当前使用的提交中。 当你想编辑框架时,你只需要转到它存储的子文件夹,并且在那里它应该像你在一个完全独立的git仓库中的地方一样,拥有自己的远程和历史记录。 在修改Framework之后,您将返回到Real-Life并更新子模块引用。 这个过程通常是这样的:
Edit files in Framework
Move to Framework subfolder
Stage, commit, and push changes to Framework repository
Go back to Real-Life folder
Update Real-Life submodule reference
借助子树,您可以在同一个存储库中使用Real-Life和Framework,仍然可以将Framework代码保留在特定的子文件夹下。 当您在Framework中更改内容时,您仍将这些Real-Life存储库视为是单个项目。 子树工具允许的是,您可以隔离您在Framework文件夹中所做的更改,并从这些与Real-Life独立存在的一组提交中创建,此提交将包含仅限Framework的更改,并且可以将其推送到Framework库。 该过程将如下所示:
Edit files in Framework
Stage, commit, and push to Real-Life repository
Create Framework commits using subtree tools
Push Framework specific commits to Framework repository
如果你仍然不确定这两者之间存在的交易,我建议你使用子模块 。 你会发现更多的文档,用例,并且通常不那么复杂。 它有一些缺点,但通过熟悉子模块,首先你可以测量子树提供的东西。 有关子模块的更多信息。
在Git中分支是它的许多重要特性之一。 如果您已经使用过其他版本控制系统,那么忘记大部分您对分支机构的看法可能会有所帮助 - 事实上,将它们实际上视为上下文可能会更有帮助,因为这是您经常使用它们的方式。 当您签出不同的分支时,您可以更改正在使用的上下文,并且可以快速在几个不同分支之间来回切换上下文。
简而言之,您可以使用git分支(branchname)创建分支,使用git checkout(branchname)切换到该上下文,在该上下文中记录提交快照,然后可以轻松地来回切换。 当你切换分支时,Git会用你的分支上的最新提交的快照替换你的工作目录,所以你不必为多个分支拥有多个目录。 你用git merge合并分支。 随着时间的推移,您可以轻松地从同一分支多次合并,或者可以选择在合并后立即删除分支。
链接地址: http://www.djcxy.com/p/15847.html上一篇: Split a git repository to work on two projects at the same time
下一篇: Bitwise memmove