【问题标题】:How two people, concurrently editing the same file is handled?如何处理两个人同时编辑同一个文件?
【发布时间】:2011-05-01 00:58:37
【问题描述】:

我相信标题已经说明了这一点。我是源代码管理的新手。

假设我有两个开发人员在同一个项目上工作,他们同时开始编辑同一个文件,然后每个人都在稍微不同的时间发送新版本。据我了解,最后发送更改的人将保留他的更改,其他人的代码将仅在存档中!!!

对吗?

请澄清。谢谢。

【问题讨论】:

    标签: github bitbucket


    【解决方案1】:

    不,这不太正确。这在某种程度上取决于您使用的版本控制软件,但我喜欢 Git,所以我会谈谈。

    假设我们有一个文件 Foo.java:

    class Foo {
        public void printAWittyMessage() {
            // TODO: Be witty
        }
    }
    

    Alice 和 Bob 都修改了文件。爱丽丝这样做:

    class Foo {
        public void printAWittyMessage() {
            System.out.println("Alice is the coolest");
        }
    }
    

    鲍勃会这样做:

    class Foo {
        public void printAWittyMessage() {
            System.out.println("Alice is teh suk");
        }
    }
    

    Alice 首先检查她的版本。当 Bob 尝试签入时,Git 会警告他存在冲突,并且不允许将提交推送到主存储库中。 Bob 必须更新他的本地存储库并修复冲突。他会得到这样的东西:

    class Foo {
        public void printAWittyMessage() {
    <<<<< HEAD:<some git nonsense>
            System.out.println("Alice is the coolest");
    =====
            System.out.println("Alice is teh suk");
    >>>>> blahdeblahdeblah:<some more git nonsense>
        }
    }
    

    &lt;&lt;&lt;&lt;&lt;=====&gt;&gt;&gt;&gt;&gt; 标记显示同时更改了哪些行。 Bob 必须以某种合理的方式解决冲突,移除标记并提交结果。

    所以最终存在于存储库中的是:

    原始版本 -> Alice 的版本 -> Bob 的冲突修复版本。

    总结:第一个提交没有任何问题,第二个提交必须在进入存储库之前解决冲突。您永远不应该以自动破坏某人的更改而告终。显然 Bob 可以错误地解决冲突,但版本控制的美妙之处在于您可以回滚错误的修复并修复它。

    【讨论】:

    • 你说得很好!鼓掌:-)
    【解决方案2】:

    很大程度上取决于您使用的系统。

    但是,在常见情况下:谁第二次提交他的更改必须执行“合并”操作。这意味着他/她需要比较这两个文件并提出合并版本。但是(!)许多流行的系统(包括 IDE)都带有智能工具来帮助您做到这一点。

    以下是一些类似的工具: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多