我目前正在与会议的博士后合作撰写论文。我们调查使用版本控制软件,git似乎是一个很好的候选人。现在我们必须真正体验它并面临一些问题。具体来说,我们有时会在推送之前编辑相同的文件,从而导致任何想要推送第二个的错误。
可以使用哪些提示/工具等来防止同时编辑?我知道git用于大型项目,许多合作者都没有遇到这些问题,所以我们做错了什么?
有什么想法吗?
答案 0 :(得分:1)
Git没有像TFS那样“锁定”文件的任何机制。如果两个人都在积极地编辑文件的同一部分,那么你应该会发生冲突。
主要事项:
与您的同事讨论您在做什么。如果可以,请协调,如果必须,请警告他们。这似乎是一种行人,但它通常发生在应有的时间。 Scrum很好,因为它使它成为你常规的一部分。
最重要的因素是您保持对自己的更改的时间。您拥有未完成的更改的时间越长,重叠更改集的机会就越多。
在您正在一起工作的功能上创建集成分支是一件好事。如果您经常创建检查点,推送和rebase,那么您就不太可能进行难以纠正的重大更改。虽然小冲突很容易处理。在推送到掌握之前,您可能必须返回并清理一些提交,但这通常很容易协调。
小事:
通过差异查看是一个了解一段代码如何变化的令人难以置信的工具。人们在不同的格式偏好之间切换会破坏这个工具。
具有一致的格式有助于解决这些无关紧要的冲突。选择一致格式的过程是另一回事。 ;)
如果您正在处理函数并注意到空格不正确,您将修复它。使用相同功能的其他人也会这样做。
例如,左缩进:
namespace foo {
namespace bar {
class Foo {
public:
void something();
};
class Foo {
public:
void something();
};
}}
namespace foo {
namespace bar {
}
}
我个人更喜欢将所有名称空间保持对齐,就像第一组一样。这可以将空白噪音降至最低。一致性是重要的事情。
标签与空格是另一个。从理论上讲,选择哪一个并不重要,但做选择一个。
避免移动代码(显然没有充分的理由)。这很难做到,但是如果每个文件中有更多文件包含更少的文件,这就不是问题了。
将小型“内务管理”更改与您的功能/错误修复提交分开。这使得合并这些提交的更改变得非常简单。如果一个是特征更改而另一个是空白更改,那么您可以盲目地进行特征更改。
答案 1 :(得分:1)
实际上,当你正在写一篇论文而不是代码时,git可能不是一个完美的工具。通过使用谷歌文档或类似的东西,您几乎可以实时看到您的合作伙伴所做的更改。而且你不必完成提交/推送/合并的事情。
答案 2 :(得分:0)
“锁定”在某种意义上是自动的。你有自己的副本,他们不能把它带走!正如他们有他们的副本,你不能把它从他们身上拿走。这假设您 使用git DVCS的分布式特性(而不是两者都访问文件共享:-(您将各自拥有自己的克隆并交换分支或推送到共同的裸仓库。< / p>
下一步是确保您使用的文档处理器适合git合并,理想情况下,这将是纯文本源,如Latex或markdown。 Git很乐意合并您的单独贡献并突出您的冲突。不要使用很长的线。
如果您正在合作,您将能够讨论发生合并冲突的常见区域并同意最佳措辞。
享受两者同时工作的自由。