【问题标题】:Binary File Merge in GIT in Visual Studio 2013 UltimateVisual Studio 2013 Ultimate 中 GIT 中的二进制文件合并
【发布时间】:2017-01-15 08:50:27
【问题描述】:

我们将 TFS 与 GIT 一起用于源代码控制。

我正在尝试获取最新版本,但遇到 dll 文件不同步的问题。

我做了以下事情;

尝试从团队资源管理器菜单中提取最新提交。然后我收到消息;

发生错误:33 个未提交的更改将被合并覆盖

然后我运行了另一个提交并包含了所有排除的文件。这包括 DLL 等。我通过团队资源管理器 -> 更改

做到了这一点

然后添加 33 个未跟踪的文件,并在本地提交。

接下来,我点击了同步,然后从传入的提交菜单中拉出。

然后我得到消息;

拉取完成但有冲突。解决冲突并提交结果。

我单击“解决冲突”链接,它会给出 77 个文件(dll、csproj 和 pdb 文件)的列表。请看下面的截图;

但是,当我单击保持本地或保持远程链接时,没有任何反应。

如果我选择合并按钮,我会收到消息

谁能指导我如何解决这个问题?

【问题讨论】:

    标签: git tfs merge


    【解决方案1】:

    Git 存储库不能很好地处理二进制文件。 Git 针对文本文件进行了优化,可以有效地区分和压缩。二进制文件无法进行差异化和压缩,因此它们会导致存储库膨胀——每次提交新版本时,Git 都必须存储整个二进制文件。这会导致 repo 变得庞大且克隆缓慢,并在切换分支时产生巨大的负面影响。

    处理程序集引用的正确方法是使用包管理器来允许在构建时恢复二进制文件,而不是提交到源代码管理。这也为您在管理程序集版本方面提供了额外的灵活性。

    对于其他类型的二进制文件(例如图像),Git LFS 允许您为二进制文件使用有效的 blob 存储,同时仍保持存储库精简且仅包含易于扩展/可压缩的文本。 TFS 2015 Update 2 支持 Git LFS,但早期版本不支持。

    也就是说,您绝对应该设置一个.gitignore 文件(如果您还没有)以确保您的binobj 文件夹不在源代码管理中;他们绝对不应该处于源代码控制中;这没有道理。如果你有一堆旧的提交污染了你的历史,你可以使用像 BFG 这样的工具来删除它们,但要注意它会重写你的 Git 存储库的历史,这可能会给其他团队成员带来问题。这是你应该做的事情,但应该与团队的其他成员仔细协调,以确保没有人遇到任何问题。

    【讨论】:

    • 丹尼尔,谢谢你,我设法通过恢复到以前的提交然后重新提交代码来解决这个问题。
    【解决方案2】:

    不要将 dll 签入源代码管理。

    【讨论】:

    • 好的,请问我该如何解决这个问题?我已经将娃娃添加到 got.ignore
    • 那么 nuget 和这个有什么关系??
    • nuget 允许您解决可能需要的任何依赖项。将二进制文件签入源代码管理绝不是一个好主意。
    • 单独删除所有提交的bin和obj文件夹来解决。请记住,这些文件将永远存在于 git repo 的历史中;并且每次有人克隆 repo 时都会导致您下载大量数据。
    • 您可以在添加任何项目文件之前使用默认的 .gitignore 文件来解决该问题。
    猜你喜欢
    • 2013-11-07
    • 2022-01-06
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2014-01-13
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多