Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github 如何处理两个人同时编辑同一个文件?_Github_Bitbucket - Fatal编程技术网

Github 如何处理两个人同时编辑同一个文件?

Github 如何处理两个人同时编辑同一个文件?,github,bitbucket,Github,Bitbucket,我相信标题说明了这一点。我不熟悉源代码管理 所以,假设我有两个开发人员在同一个项目上工作,他们在同一时间开始编辑相同的文件,然后他们每个人在稍微不同的时间发送新版本。据我所知,最后发送更改的一方将保留其更改,另一方的代码将仅在存档中 对吗 请澄清。谢谢。不,那不太正确。这在某种程度上取决于您使用的版本控制软件,但我喜欢Git,所以我将讨论它 假设我们有一个Foo.java文件: class Foo { public void printAWittyMessage() {

我相信标题说明了这一点。我不熟悉源代码管理

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

对吗


请澄清。谢谢。

不,那不太正确。这在某种程度上取决于您使用的版本控制软件,但我喜欢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");
    }
}
鲍勃这样做:

class Foo {
    public void printAWittyMessage() {
        System.out.println("Alice is the coolest");
    }
}
class Foo {
    public void printAWittyMessage() {
        System.out.println("Alice is teh suk");
    }
}
爱丽丝先检查她的版本。当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>
    }
}
class-Foo{
public void printAWittyMessage(){
>布拉德布拉德布拉德布拉:
}
}
标记显示同时更改的行。Bob必须以合理的方式解决冲突,删除标记,并提交结果

因此,存储库中最终存在的是:

原始版本->爱丽丝的版本->鲍勃的冲突修复版本


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

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

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

以下是一些类似的工具:

你说得很好!鼓掌:-)