我相信标题已经说明了。我是源代码控制的新手。
所以,假设我有两个开发人员在同一个项目上工作,他们同时开始编辑同一个文件,然后每个人都在稍微不同的时间发送新版本。据我了解,最后发送更改的人将保留他的更改,另一个人的代码将仅在存档中!!!
那是对的吗?
请澄清。谢谢。
不,这不太正确。这在一定程度上取决于您使用的版本控制软件,但我喜欢 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 可以错误地解决冲突,但版本控制的美妙之处在于您可以回滚错误的修复并修复它。
很大程度上取决于您使用的系统。
然而,常见的情况是:谁第二次提交他的更改必须执行“合并”操作。这意味着他/她需要比较这两个文件并提出合并版本。但是(!)许多流行的系统(包括 IDE)都带有智能工具来帮助您做到这一点。
这里有一些类似的比较工具: http ://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools