【问题标题】:Shared Library in repository with visual studio与 Visual Studio 存储库中的共享库
【发布时间】:2016-03-29 21:14:55
【问题描述】:

我是 Git 版本控制的新手。我只是希望每个项目都有自己的存储库。

我创造了

  1. RepoA 中的一个项目(共享库)
  2. RepoB 中具有 A 子树的 B 项目(共享库)
  3. RepoC 中具有 A 子树的 C 项目(共享库)
  4. RepoD 中的 D 项目(控制台应用程序)具有 B 和 C 的子树

文件夹结构如下。

D

-B

--A

-C

--A

如你所见,一个文件夹被复制了,我不能在visual studio中两次添加同一个项目。

如果我在B文件夹中添加A项目,就会出现编译错误。

找不到元数据文件项目 C.....'A.dll' 因为C文件夹中的A项目,从未编译过,所以缺少A.dll。

如果 C 项目中的 A 编译一次,它可以正常工作。(通过在 C 项目中打开 C.sln 或 A.sln) 当然会有A.dll,

但是下次别人从git下载D项目时,他/她应该在编译D项目之前在C项目中编译C或A。

有人对此有好的解决方案吗?

【问题讨论】:

    标签: git visual-studio-2015 repository shared subtree


    【解决方案1】:

    您可以尝试阅读有关子模块的信息。

    Submodules 始终允许将外部存储库嵌入到源代码树的专用子目录中指向一个特定的提交。


    git submodule

    像您目前所做的那样,将您的大项目分解为子项目。
    现在将每个子项目添加到您的主项目中:

    git submodule add <url>
    

    将投影添加到您的存储库后,您必须对其进行初始化和更新。

    git submodule init
    git submodule update
    

    Git 1.8.2 开始,添加了新选项 --remote

    git submodule update --remote --merge
    

    fetch 将在每个子模块中merge them in 从上游获取最新更改,并且 check out子模块的最新版本。

    正如the docs 描述的那样:

    --remote

    此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。

    这相当于在每个子模块中运行 git pull。


    但是,在 C 中的 bug 修复会影响与父层共享的代码的情况下,我将如何推送提交?

    再次重申:使用子模块会将您的代码作为其内容的一部分放在主项目中。将其本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。


    这是子模块的图示 - 另一个项目中的项目,其中每个项目都是一个独立的项目。


    git subtree

    Git 子树允许您插入任何存储库作为另一个存储库的子目录

    submodule 非常相似,但主要区别在于代码的管理位置。在子模块中,内容被放置在一个单独的 repo 中并在那里进行管理,这允许您将其克隆到许多其他 repo。

    subtree 将内容作为根项目的一部分进行管理,而不是在单独的项目中。

    您不必写下如何设置它以及了解如何使用它,您只需阅读这篇将解释一切的优秀文章。

    https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

    【讨论】:

    • 感谢您的回答。但我想使用子树。由于以下原因。 1. 我在开发控制台应用程序时需要更新库。如果我使用子模块,我需要在另一个解决方案中打开库,更改代码,提交,推送然后我必须从我的控制台解决方案更新模块。这就是我对子模块的理解。 2. 即使有子模块,也不能解决上述问题。谢谢。
    • 没问题,这就是为什么我给你解释了你可以使用的选项。
    • 其实你的回答帮助我更深入地理解了子树,但是,这不是我想要的答案,但没有任何其他的答案。我会接受你的答案。谢谢;)
    • 我有同样的问题,并认为这是一个很好的答案。我得出了同样的结论——对于 VS 2017 子树来说“更好”,但它看起来更像是 VS git 插件如何工作的神器,并不一定代表理想的方法,所以我喜欢了解两者之间的区别子模块和子树。
    猜你喜欢
    • 2020-04-04
    • 2015-06-10
    • 1970-01-01
    • 2012-03-29
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2022-12-11
    相关资源
    最近更新 更多