存储库中的共享库 visual studio

Shared Library in repository with visual studio

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

我创造了

  1. RepoA 中的项目(共享库)
  2. RepoB 中的 B 项目(共享库)具有 A 的子树
  3. RepoC 中的 C 项目(共享库)具有 A 的子树
  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项目时,he/she应该在编译D项目之前先在C项目中编译C或A。

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

您可以尝试阅读子模块。

Submodules allow foreign repositories to be embedded within a dedicated subdirectory of the source tree, always pointed at a particular commit.


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 incheck out子模块的最新版本。

正如the docs描述的那样:

--remote

This option is only valid for the update command. Instead of using the superproject’s recorded SHA-1 to update the submodule, use the status of the submodule’s remote-tracking branch.

这相当于运行 git拉入每个子模块。


However, how would I push a commit in the scenario of bug fix in C which affects the code shared with the parent layers?

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


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


git subtree

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

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

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

与其写下如何设置它和了解如何使用它,您可以简单地阅读这个优秀的 post,它会解释这一切。

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