0

我一直在研究一个包含大约 40 或 50 个项目的 Visual Studio 解决方案。

我在 .sln 文件中添加了大约 10 个项目,但与此同时,其他人在 .sln 文件中添加了一个项目。

如此有效地有一个文件 - V1,两个人独立地创建了两个独立的 V2。

我发现合并更改是一场噩梦。我正在使用的机器上安装了 BeyondCompare,它显示了一个三列合并。我想不通,所以我决定用 git 认为的远程版本覆盖我的本地文件。但是后来我遇到了重新添加新项目的问题。

所以。在我进行第 90 次 pull+rebase / commit 之前,有没有简单的方法可以解决这个问题?就像,用远程端的内容覆盖所有内容的当前本地副本。然后重新添加我新添加的项目。然后提交。构建+测试。然后推。也许?

*编辑:FWIW,这台机器还安装了乌龟 git,现在所有的东西都用绿色勾号显示......所以这很好,对吧?

4

3 回答 3

1

如果您要求 Git / 其他工具知道远程 sln 文件中添加了项目,请添加它们,然后添加我添加的项目 - 不,这不应该是您的方法。

只需修复合并冲突,以便在遥控器上添加的所有项目以及您添加的项目都在那里。

于 2011-08-22T16:20:37.017 回答
1

首先,让我们回到已知状态。git reflog在你尝试做所有这些拉动和变基之前,做一个并找到一个提交。执行 agit checkout -b my-feature <commit-id>创建一个名为my-feature指向该提交的分支。验证它在没有来自服务器的所有最近更改的情况下按预期工作。

现在,让你的master分支匹配服务器上的内容git branch -f master origin/master

现在是困难的部分。您必须解决您更改的内容与服务器上更改的内容之间的合并冲突。这是在团队中工作的正常部分,你应该有条不紊地学习如何去做,而不是大惊小怪。 是一个很好的资源。Beyond compare 是一个很好的工具来帮助解决三路合并,你应该学会使用它。

有时,如果您有一个由工具生成而不是手工编写的文件,则使用该工具进行更改会更容易,只需擦除本地更改并稍后将其添加回来。如果您并不真正了解 sln 文件的语法,那么您可能就是这种情况。

仅更改 sln 文件以匹配服务器上的内容,请执行以下操作:

git checkout master -- filename.sln
git commit -am "Reset solution file to match origin"

然后添加您的项目并像往常一样再次提交文件。现在您想将这些更改放到主分支上。做:

git rebase master
# resolve any merge conflicts, then git rebase --continue after each one
git checkout master
git merge my-feature
# test to make sure everything works
git push
于 2011-08-23T16:47:33.497 回答
0

我处于“相同但不同”的境地。我把问题分成了两部分。一个是简单地捕捉我能捕捉到的历史并将其放入名义上的快照/提交序列中。我可以识别出许多不同的子项目和阶段,因此每个在捕获阶段都有自己的 repo。然后,我可以将graft它们放在一起并git filter-branch用来将它们全部带入一个重要的历史中。

对于当前的工作,我既要从合适的“现在”点开始一个新的 git 存储库,又要继续使用已建立的合并技术,将转储到 git 存储库中,直到我们可以将这两个过程完全融合在一起。有些人需要一些令人信服的和(自我)管理意味着我们不敢放弃当前的做法,直到新的做法被证明有效。

“理解” git 哲学并放弃旧的根深蒂固但错误的方法需要一段时间。

于 2011-08-22T19:42:50.833 回答