19

我相信标题已经说明了。我是源代码控制的新手。

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

那是对的吗?

请澄清。谢谢。

4

2 回答 2

40

不,这不太正确。这在一定程度上取决于您使用的版本控制软件,但我喜欢 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>
    }
}

和标记显示哪些行同时<<<<<更改=====>>>>>Bob 必须以某种合理的方式解决冲突,删除标记并提交结果。

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

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

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

于 2010-10-26T23:29:00.630 回答
4

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

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

这里有一些类似的比较工具: http ://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools

于 2010-10-26T23:29:20.507 回答