你推动每一次提交吗?

ryn*_*ynd 42 git push commit repository

我想,如果有人能给我更多关于使用git和远程存储库的细节.我还没有使用远程存储库.

对于本地存储库,您提交的更改可能不会太过于破碎.什么被推送到远程存储库?每个本地提交?或者完成的整体工作,然后与其他人的整体工作合并?我认为远程存储库的日志必须令人困惑,如果每个人都推送每个提交.

aca*_*tle 42

从远程存储库推送和拉取并不像本地提交那么重要.通常每天推拉几次就足够了.就像@earlonrails所说的那样,更频繁的推动意味着更改冲突的可能性更小,但通常并不是那么大.

按照这种方式考虑,通过提交到本地存储库,你基本上是在说"我相信这段代码.它完整.它运行.我已经测试过了.我已准备好让其他人看到它." 如果你想在每次提交后推送到远程存储库,那很好,但只要你定期执行它就没那么重要了.

本地存储库用于跟踪您的更改以保护您的工作.远程存储库用于将工作分发给所有队友并跟踪每个人的更改.您的队友需要访问您的代码,但通常情况并不紧急,可以等到一天结束或者您想要推送时.

  • 我不同意你关于本地提交完整性的陈述.我经常在我的分支上进行本地工作提交或临时提交,目的是在推送之前对我的分支进行变基和清理(压缩,重新编码,重新排序等).恕我直言,这是您对遥控器的推动,表达了对您的变更集的质量和最终确定的承诺. (23认同)
  • 如果有本地仓库的开发机器崩溃了怎么办? (11认同)
  • 我坚信源控制系统应该被视为这样而不是备份解决方案.这是一种手段,而不是目的本身.我见过人们认为他们的SC是一个真正的备份解决方案,并使用破坏整个软件的代码进行无意义的提交,并声明"我想在周末之前备份我的代码".此外,尝试阅读此类系统的提交历史是一场噩梦. (3认同)

ear*_*ils 17

您可以在方便时推送到遥控器.一次推送一堆提交的唯一问题是您可能需要将更多冲突与更多受影响的文件合并.如果你是git的新手我推荐git ready.

遥控器的工作就像当地的回购,但你必须和别人玩得很好.如果其他人在您推动之前推送到遥控器.然后他们必须在您推动之前将其更改.如果您同时触摸同一个文件,由于他们的更改是第一个,您需要将两个更改合并在一起.

  • "你必须和别人玩得很开心" - 我知道,这就是这个话题的实质内容.看到我所做的每一点改变,都很少有人有所收获. (2认同)

Dmi*_*nko 8

我尝试尽可能推送每个本地提交(我使用Git).我很少在本地提交2次或更多次.否则,就有可能无法解决的冲突风险.

我更喜欢使用rebase而不是merge,以保持历史更加线性.如果我在本地有2个提交A和B(B更旧),并且B与即将发生的更改冲突,在解决了rebase上的coflicts后,我必须检查B,检查编译,可能运行测试,然后只切换到A并推送所有.

这就是为什么我喜欢尽快推出我拥有的一切.


Yif*_*Sun 7

我一般不同意最佳答案和一些评论。提交和推送都不必对代码的质量负责。

在svn时代,大家都在同一个分支工作。您的代码中的错误很快就会传播给其他人。在这种情况下,你肯定要保证你的代码质量,这就是许多公司和组织中 svn 被 git 取代的原因。

我们需要明确什么是典型的 Git 工作流程。假设您的 master 分支有一个可用的软件版本。有些人喜欢使用 master 分支作为发布分支,而另一些人则使用它作为开发分支。不要紧。每当您需要添加功能或修复错误时,您都可以从主(或另一个)分支创建一个分支。该功能应该足够小,可以在不涉及对代码库进行大量修改的情况下进行处理。如果修改量较大,应创建多层分支,使最后一层分支足够小。

如果每个分支都添加一个小功能,那么不太可能有很多人在同一个分支工作。如果有多个人致力于一项功能,那么该小组应该很小并且经常沟通,因此冲突应该很容易解决。如果一次提交或一次推送出现问题,那么只有您或您的小团队才会遇到问题。

那么我们应该从哪里保证代码的质量呢。我的答案是拉取请求。在 Github 中,您修改代码并提交拉取请求。当您提交拉取请求时,您需要保证您的代码可以编译并通过测试。在Gitlab中,您在修改代码之前创建合并请求,但标记为WIP(正在进行中)。然后你修改代码。在删除 WIP 标记之前,您需要保证您的代码具有良好的质量。此外,代码审查员将是另一层保护。

您的分支中应该很少发生冲突,但当您将分支合并到基础分支时,可能会发生冲突。您应该在合并发生之前修复它。

唯一的事情与rebase有关。许多开发人员喜欢在提交合并冲突之前对其分支进行变基,以使 git 提交历史记录看起来更好。如果您推送到远程并且其他人使用了您的代码,则变基会导致需要修复的棘手问题。但是,如果您始终在只修复一个小功能的分支上工作,那么无论如何都没有人想使用您的分支。另外,我个人不太喜欢变基,因为它会修改历史。

所以我的结论和其他人类似,经常承诺,经常推动,但原因不同。