git pull before git push 练习的基本问题

Basic question on practice of git pull before git push

在高层次上,我理解在 git-push 之前 git pull(并手动合并冲突,如果有的话)是一个很好的做法。我在企业环境中工作。我的问题是:

(1) 我可以在不先 git-pull 的情况下进行 git-push 吗?是完全不允许还是 github 可以(由管理员)配置为以某种方式运行——比如在 push 期间 crib 没有完成 pull 或根本不 crib ..

(2) 跟进 (1) 问题,说我确实先 git pull,但后来我并没有真正优雅地合并任何东西,只是在本地文件中覆盖,然后尝试 git 推,这会通过吗?。我的意思是 namesake/record,我做了 git-pull,虽然我不尊重它......是什么阻止了用户这样做(如果有的话)。

(3) 有没有一种方法可以配置分支,以便仅通过拉取请求而不是直接(例如从命令行等)推送到分支。有没有类似branch owner的概念可以配置是否允许直接推送?

(4) 我知道其中一些可以通过 运行 一些实验来尝试,但这只会让我对当前的设置有所了解。我想了解什么是标准行为以及所有可以自定义的行为...

一一解决您的问题:

(1) Can I do git-push without first git-pull?. Is it not allowed at all or github can be configured (by admin) to behave in a certain way -- say to crib during push that pull was not done or to not crib at all..

先推后不拉不一定有问题。如果其他人将更改推送到您的目标分支,而您还没有拉取这些更改,这只是一个问题。在这种情况下,推送将被拒绝。您将收到的错误消息类似于:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to XXX

如果您想先推送而不先拉取,可以使用 git push -f 覆盖此错误(尽管服务器可能配置为仍然拒绝您的推送)。然而,这很少是可取的,因为您将 覆盖 其他人所做的更改。有关详细信息(以及为什么不这样做),请参见例如How do I properly force a Git push? .

(2) Following up on (1) question, say I did do git pull first, but then I didn't really merge anything gracefully and just overwrote in local files and then try to git push, will this go through?. I mean for namesake/record, I did git-pull, though I didn't honor it...what prevents a user from doing this (if at all).

是的,它会通过,不,git 中没有任何东西可以阻止它。虽然 git 确实可以(在某种程度上)判断你在合并时是否合并或丢弃了其他人的更改,但 git 无法判断这是否 正确 .但是,您的更改(包括您的合并)将在 git 的历史记录中可见,因此您的同事稍后可以向您投诉:-)。

(3) Is there a way to configure a branch so that pushes to the branch only happen thru pull request and not directly (say from command line etc). Is there a notion of something like branch owner who can configure whether to allow direct push or not?.

在核心 git 本身,没有这样的东西。但是,当在服务器上托管项目的中央存储库时,服务器通常不会只是 运行 git,而是支持 git 的托管服务应用程序(例如 Gitlab、Bitbucket 或基泰)。这些托管应用程序通常支持限制谁可以在何时何地推送。

(4) I understand that some of this could be tried by running some experiments, but that would only give me some idea on my current setup. I want to understand what is the standard behavior and what all can be customized...

希望我提供了一些见解。通常可以在文档中找到标准行为。