【问题标题】:Using a project in a Git repo in another project在另一个项目中使用 Git 存储库中的项目
【发布时间】:2011-02-21 01:17:49
【问题描述】:

我正在构建一个框架,以使一些常用功能(数据库连接)更容易,并希望在另一个项目中使用它。我总是可以复制和粘贴它,但我正在研究它并不断扩展它。每当我在我的 Git 存储库中进行提交时,让它复制更新后的自我会容易得多。

我可以使用 Git 自动更新我其他项目中的框架,还是必须找到其他解决方案?

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    使用 git 子树或 git 子模块。

    上次我检查过,子模块有一些重大问题(但我听说它们在最近的版本中有所改进)。详情见这里:Git submodules workflow

    简而言之:

    子树是常规的 Git 分支,通过特殊的合并策略合并,将所有文件放入主机存储库工作副本的子目录中。除了合并策略(仅在创建合并提交时才重要),Git“子树”是一个完全正常的 Git 分支。

    优点:

    • 不需要额外的工具支持,除非您需要从子树中提取新的更改,即便如此,所有支持都是-s subtree 命令行选项(完整工作流程请参见here)。只有在拉取子树时才需要记住子树。

    缺点:

    • 所有子树提交都在宿主项目的历史记录中可见。
    • 不要将更改提交到子树所在的主机存储库目录,否则在下一次拉取子树时会遇到冲突。

    子模块是主机存储库中的 Git 存储库

    优点:

    • 更清晰的历史记录,更好地与主机存储库分离。
    • 可以直接从子模块存储库直接提交到子模块上游(或者我认为是这样)。

    缺点:

    • 对于每个(或许多)Git 命令,您都记得您正在处理带有子模块的存储库,许多令人讨厌的极端情况(或者当我查看时是这样)。使用存储库的每个克隆都需要特殊工具支持。

    免责声明:我对子模块有偏见。亲自尝试看看,哪种方法更适合您的工作流程。

    【讨论】:

    • 子模块看起来像我需要的。任何人都知道适用于子模块的 Mac 的可视化 Git 客户端(想想 Tower、Cornerstone [虽然那是用于 SVN])吗?
    • 实验并确保子模块真正适合您的工作流程,然后再提交。我浪费了很多时间(请参阅我链接的问题)才意识到我根本无法使用它们。
    • git 子模块很好。这是使用子模块的一个很好的例子。 chrisjean.com/2009/04/20/…
    • 我正在查看子树,但我不确定有什么区别......我可能是唯一维护这两个项目(框架和项目)的人,但我只是想将两者分开,以便我可以选择稍后在另一个项目中使用该框架,而无需复制粘贴。什么时候子树会更好地工作,什么(如果有的话)Git 客户端(对于 Mac)支持子树或子模块?我总是可以使用命令行,但我更喜欢在 GUI 中完成所有操作...
    • @Caesar:好吧,我链接到一个帖子,其中列出了我的工作流程不接受(或曾经)不接受子模块的原因。如果您发现它们对您来说很好 - 没问题。我对子树很满意。
    【解决方案2】:

    git 子模块。

    在不同的地方更新会有一些问题,但应该可以解决。

    【讨论】:

    • 对我来说它没有成功,所以在采取一种或另一种方式之前要小心并先进行试验。
    猜你喜欢
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多