【问题标题】:Visual Studio 2013 Github commit deadlockVisual Studio 2013 Github 提交死锁
【发布时间】:2014-02-20 22:56:29
【问题描述】:

我和几个朋友正在通过 GitHub 开展一个项目。我们都共享同一个分支,这可能不是一个好主意。

我编辑了一些代码并提交了更改。我去推送提交到 GitHub(我正在使用 Visual Studio 2013,它是内置的 Git 工具),但我收到了这个错误:

“有新的远程更改。您必须先拉取它们,然后才能使用 推。”

所以我尝试拉取远程更改并收到此错误:

“发生错误。详细消息:libgit2引发错误。 类别 = 21(合并冲突)。 9 个未提交的更改将是 被合并覆盖”

我尝试更改分支,以便可以推送我的更改,然后将它们与第一个分支合并,但出现此错误:

"无法切换到master,因为有未提交的更改。提交 或在切换分支之前撤消更改。查看输出窗口 了解详情。”

我不知道该怎么做,除了可能将我的更改通过电子邮件发送给我的一位朋友并让他们推送我的更改。但是,我不知道我的本地提交会发生什么。

编辑

问题已解决。在确保同步所有提交后,我打开了 git bash 并提取了远程提交。经过几次尝试后,我回到 Visual Studio 并发现它已经注册了合并。我解决了所有冲突的文件并能够推送项目。

感谢所有回答的人!

【问题讨论】:

  • 您需要提交所有本地更改,然后拉取,然后推送。
  • 当我尝试拉取时,我收到此错误消息:发生错误。详细消息:libgit2 引发错误。类别 = Os(错误)。无法打开“C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe”进行写入:该进程无法访问该文件,因为它正被另一个进程使用。
  • 听起来您实际上并未提交所有您的更改。做一个git status(或任何等效的Visual Studio 提供)。
  • 我提交了所有更改,但我仍然收到此错误:发生错误。详细消息:libgit2 引发错误。类别 = Os(错误)。无法打开“C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe”进行写入:该进程无法访问该文件,因为它正被另一个进程使用。
  • @WalterSchultz:您应该将bin 目录以及许多其他文件添加到.gitignore。请参阅 GitHub 的忽略模板。

标签: git visual-studio-2013


【解决方案1】:

虽然听起来很愚蠢,但我只是转到命令行,它就成功了。

  1. Git 状态
  2. Git 拉动
  3. Git 推送

一切正常。

如果我在 Visual Studio 中做同样的事情,它就不起作用。去搞清楚。

【讨论】:

  • 这里也一样!谢谢!
  • 对。我经常遇到这种情况。 VS拒绝做某事但通过控制台没问题。
  • 通过命令行将是另一种很好的方法,因为它可以工作。
【解决方案2】:

使用 Visual Studio Git 提供程序(VS 2013、VS2015)时,在执行了本地 Commit 的情况下也会出现这种情况,但是,当尝试从服务器拉取并合并,错误信息:

“未提交的更改将被合并覆盖”

仍然显示,并且拉取操作被取消。

这可能是因为在本地,有 Untracked Files 不是本地 Commit 的一部分,而是远程 Pull 的一部分;合并解析无法处理这种情况。

通常当某些文件(例如 T4 模板输出)包含在一个工作站上的提交中,而在其他工作站上不包含时,就会发生这种情况。

另外,这可能发生在 Visual Studio 2015 中,在处理 MVC6 项目时(在撰写本文时),当wwwroot 文件夹已包含在一个工作站上的 Commit 中,但没有包含在另一个工作站上(一个可能的原因是 .gitignore 文件在尝试使用同一服务器存储库的工作站上不同)。

解决方法:

a) 查看 Team Explorer > Changes 对话框。

b) 验证实际驻留在服务器分支中的任何未跟踪文件是否包含在您的提交中;为此,请右键单击并选择添加。或者,如果您打算覆盖它们,您可以选择删除。请注意。

c) 执行 Commit,然后执行 Pull,并执行任何所需的合并冲突解决方案。

d) 执行推送以更新您的远程存储库。

【讨论】:

  • 很好的答案!对我来说,问题在于 Nuget 包文件之一。删除了本地未跟踪的文件并使用拉取请求中的文件进行了更新。
  • 作为参考,截至 2015 年 21 月 12 日,我的回答仍然是最新的;我已经在 VS 2013 和 VS2015 中使用 ASP.Net MVC6 RC1 验证了这种行为,目前使用最新的 Visual Studio Git Provider。
  • 我试过上面的步骤但是还是不行,我好像是Visual Studio上github组件的bug。我也有 Git Tortoise,通过它我可以同步我的本地分支然后推送它,在 Master 和我的本地之间的合并是可能的之后。
【解决方案3】:

现在,您实际上是在尝试在您的分支中进行git merge 未提交的更改(拉取只是获取+合并)。 Git 理所当然地抱怨这样的操作会覆盖分支中未提交的更改。

要继续拉取操作,您需要从工作目录中删除这些未提交的更改。有几种方法可以做到这一点

  1. 将它们提交到您的本地存储库
  2. stash 它们,运行 pull 操作,然后在 pull 之上 unstash
  3. 提交、获取、变基然后合并

如果您是 git 新手,我可能会从选项 #1 开始。

【讨论】:

  • 如何将未提交的更改提交到本地存储库?你怎么知道这些变化在哪里?
  • 不是问题,这也发生在所有提交的本地更改中。这是 Visual Studio 的问题。
【解决方案4】:

Visual Studio 2013 作为 GIT UI 似乎还不够成熟。即使在本地提交了所有更改后,我也遇到了类似的问题。对于 Visual Studio 2013 中的 Push & Pull 引起的错误,我建议使用 Git Bash 执行 git pull 命令。命令行拉取命令比 VS UI 强大得多,并且会克服一些问题。

作为对 Walter Schultz 的回应,您收到错误消息是因为您似乎试图将二进制和汇编文件(dll 和 exe)保留在版本控制中。二进制文件不可编辑且不可合并,因此它们不应包含在版本控制中。

为了从 GIT 存储库中排除这些文件,您可以创建一个 .gitignore 文件并包含以下项目:

--- begin .gitignore file ----------------
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates
*.cache

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
x64/
build/
bld/
[Bb]in/
[Oo]bj/
Dev/
bin/
--- end gitignore file ----------------

创建 .gitignore 文件后,进入本地存储库并删除 /Bin/ 文件夹中的所有文件以及您不希望跟踪的其他文件。
然后推送到本地并将您的代码同步到服务器存储库。
希望这会有所帮助。

【讨论】:

    【解决方案5】:

    同样的事情发生在我身上,我提交了所有更改并在尝试切换分支时遇到了同样的错误。

    我意识到我选择“忽略”了一个文件,我将其留在了“排除的更改”下。显然,VS2013 没有很好地处理这个排除。

    所以经过多次尝试,我想出了一个简单的解决方案:

    1. 我将要忽略的文件从“排除的更改”移到 “包含的更改”;
    2. 我做了一个本地提交;
    3. 切换分支没有问题;

    【讨论】:

      【解决方案6】:

      我没有取消提交更改,在执行合并开发时仍然有同样的错误。我试过了:

      1. git 状态,然后
      2. git 拉

      然后尝试合并再次开发,错误不再出现。不过,我必须解决一些冲突。 我可以想象只有第二个命令是真正相关的,但我不知道这里发生了什么,所以我宁愿记录所有步骤。

      【讨论】:

        【解决方案7】:

        我必须下载命令行工具,它允许我在那里签出主分支(这也在 VS 中签出)。然后我做了一个 git pull ,然后由于与远程和本地分支的合并发生冲突而引发了额外的错误。修复了冲突,提交,然后同步解决了这个问题。

        http://blogs.msdn.com/b/visualstudioalm/archive/2013/03/08/use-the-git-command-prompt-to-supplement-visual-studio.aspx

        【讨论】:

          【解决方案8】:

          从命令行“git merge {branch name}”运行它,产生了一个更具体的错误。 “.gitignore 中的合并冲突”

          【讨论】:

            【解决方案9】:

            对于我创建的一个新 MVC 项目,我遇到了类似的问题,对于合并时的任何新分支,它都会给出一个错误,我没有一个月前创建的项目。我将 .gitattribute 文件从不错的工作项目添加到具有上述错误的项目中,它解决了问题。现在我可以毫无问题地合并了。

            我只是将 .gitignore 添加到 master 并提交它。

            【讨论】:

              【解决方案10】:

              我不得不在没有加载解决方案的情况下在 VS 2013 中运行 git add-in。

              我的问题是VS在加载windows应用项目时启动了application.vshost.exe,因此阻止了git add-in执行一些操作。

              已经使用 .gitignore 来自 VS studio 模板,但那是不同的。

              【讨论】:

                【解决方案11】:

                我在 VS 2015 中遇到了这个问题,唯一解决它的是重新启动 VS。上述其他情况均不适用。

                【讨论】:

                  猜你喜欢
                  • 2014-11-15
                  • 2020-09-18
                  • 1970-01-01
                  • 2015-06-24
                  • 1970-01-01
                  • 2014-08-01
                  • 2010-10-09
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多