Git – 单个 Git 存储库中的多个 Visual Studio 解决方案

从 VS2022 开始,不可能创建一个 Git 存储库来包含多个 VS 解决方案,因此我们向 SourceTree 提供资源并实现了目标。技术细节在文章中。

 

1.问题

我遇到的问题是我想将我的一篇文章的源代码发布到 GitHub 上,以便用户可以轻松下载它。问题是一篇文章的源代码包含四个 Visual Studio C# 解决方案。我不想将解决方案合并为一个,这也不明智,因为多个 VS 解决方案包含一个具有相同名称的项目,这就是我在文章中解释的代码的演变。我希望用户在“一个克隆”中轻松获得文章的完整源代码。这是我的文件夹结构:

我打开VS2022,我被卡住了。VS2022 意味着 Git 存储库是每个 VS 解决方案的。而且我有多个 VS C# 解决方案,我想将它们打包到一个存储库中。现在怎么办?

2. 检测技术:Git Submodule 或 Git Subtree

有那么一刻,我认为像 Submodule 或 Subtree 这样的部分 Git 技术会有所帮助。但是,在仔细检查它们之后,它们并不是为了这样的目的。我不想共享库代码,而是想一次性从 GitHub 上下载所有内容。我不认为您可以在 Git 中创建包含多个存储库的“工作场所”,并从“git 克隆”的角度将它们视为一个。

3. 解决方案 - 在 SourceTree 中创建单个存储库

我发现我能做的最好的事情就是在更高级别的目录上创建 Git 存储库,其中包含我拥有的所有四个解决方案。这样,我将在一个 Git 存储库中获得四个解决方案。我立即知道,我将在每个存储库中拥有分支,而不是每个 VS 解决方案。

3.1。创建存储库

我检查了 VS2022 中的 Git 选项,发现它们是有限的,所以我需要另一个 Git 工具。我决定使用 Sourcetree 创建一个高级目录存储库。

不要提交任何东西!我们需要先设置.gitignore文件。如果您没有首先设置.gitignore文件,那么您的所有项目文件,例如二进制文件和中间构建文件都将被检入存储库,我们不希望这样。

3.2. 设置 .gitignore

为了模拟 VS2022 的工作,我将 VS2022 生成的两个文件(在其他 C# 项目中创建的.gitignore.gitattributes文件)复制到我的存储库的根目录中并签入。

我们手动执行此操作是因为我们没有使用 VS2022 创建 Git 存储库,在这种情况下,VS2022 会根据您选择的项目类型自动创建.gitignore 。由于我们通过 SourceTree 接管了在自己上创建存储库的责任,因此我们有责任创建正确的.gitignore文件。

3.3. 签入 C# VS 解决方案文件

然后,我将所有 Visual Studio 解决方案文件提交到存储库中。因为.gitignore已设置,所以提交将忽略二进制文件等。

3.4. 创建 GitHub 存储库

然后,我在 GitHub 上创建了我的远程存储库帐户并推送了文件。

您可以浏览远程端的存储库并验证没有二进制文件或其他项目文件被检入到存储库中。如果确实发生了这种情况,那么您的.gitignore文件有问题。

3.5. 合并不可合并的分支

我现在遇到的问题,刚刚发生,但我确信我和其他人会再次发生,是我完成了两个分支:主分支和主分支。“主”分支默认由 GitHub 创建,那里有一个自述文件。SourceTree 默认创建分支“master”,我的代码(我的四个 VS 解决方案)就在其中。

好的,这里不需要有两个分支,让我们将它们合并并去掉其中一个。让我们保留 GitHub 默认分支“main”并删除“master”。

但是当您尝试合并这两个分支时会出现问题:

它给出了一个错误:“致命:拒绝合并不相关的历史”。

由于我们的两个分支没有共同的祖先提交,SourceTree 认为我们做错了什么。但我们知道我们是对的,并且想强迫它。

我看了看,它在 [1] 中说您无法从 SourceTree GUI 解决这个问题。所以,我们需要 GitBash 来运行命令行 Git 命令。问题的解释和说明在 [2] 中。
我们需要运行“ git merge <branch-name> --allow-unrelated-histories

因此,您可以从 SourceTree(终端按钮)打开 GitBash,然后执行命令。系统将提示您在单独的文本编辑器中输入提交评论。然后合并将继续。

这是合并分支现在的样子:

您将更改推送到 GitHub 并验证“主”分支现在是否包含您的所有文件:

3.6. 删除不需要的分支

现在,您可以在 SourceTree 本地删除“master”分支,也可以在 GitHub 远程删除“master”分支。这是它现在的样子。分支历史被保留,但没有分支“master”:

4.在VS2022中验证解决方案

现在是时候看看 VS2022 方面的情况了。首先,我们获取克隆 URL:

然后,我们在 VS2022 中克隆存储库。

这是我们得到的。我们一次得到了所有四种解决方案。

通过点击一些解决方案,我们去它:

通过单击上面的按钮,我们可以返回所有四个解决方案的视图。

这就是我们想要的。唯一的问题是所有四个解决方案都在同一个分支上,即“主”分支。您可以做的最好的事情可能是为每个解决方案创建一个单独的分支并检查那里的代码更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值