web-dev-qa-db-ja.com

すべてのコミットをプッシュしますか?

Gitやリモートリポジトリでの作業の詳細を教えていただければと思います。私はまだリモートリポジトリで作業していません。

ローカルリポジトリに、あなたがあまりにも世界を壊さないかもしれない小さな変更をコミットします。リモートリポジトリにプッシュされるものは何ですか?すべてのローカルコミット?または、行われた全体的な作業は、他の全体的な作業とマージされますか?誰もがすべてのコミットをプッシュする場合、リモートリポジトリのログは混乱しているに違いないと思います。

42
rynd

リモートリポジトリからのプッシュおよびプルは、ローカルコミットほど重要ではありません。通常、1日に数回押したり引いたりするだけで十分です。 @earlonrailsが言ったように、頻繁にプッシュすることは、変更が競合する可能性が少ないことを意味しますが、通常はそれほど大したことではありません。

このように考えると、ローカルリポジトリにコミットすることにより、基本的に「このコードを信頼します。完全です。実行されます。テストしました。他の人が見る準備ができています。」コミットのたびにリモートリポジトリにプッシュする場合は問題ありませんが、定期的に実行する限り、それは実際には問題ではありません。

ローカルリポジトリは、変更を追跡して、作業を保護するためのものです。リモートリポジトリは、作業をすべてのチームメイトに配布し、全員の変更を追跡するためのものです。チームメイトはコードにアクセスする必要がありますが、通常は緊急ではなく、一日の終わりまで、またはプッシュしたいときはいつでも待つことができます。

42
acattle

都合の良いときにリモートにプッシュできます。一度に大量のコミットをプッシュする場合の唯一の問題は、より多くの競合をより多くの影響を受けるファイルとマージする必要がある場合があることです。 gitを初めて使用する場合は、 git ready をお勧めします。

リモートはローカルレポジトリと同じように機能しますが、他の人とNiceをプレイする必要があります。プッシュする前に他の人がリモートにプッシュした場合。その後、プッシュする前に変更をプルする必要があります。両方が同じファイルに触れている場合、それらの変更が最初にあったため、2つの変更をマージする必要があります。

17
earlonrails

可能な限りすべてのローカルコミットをプッシュしようとします(Gitを使用しています)。まれに、ローカルで2つ以上のコミットがあります。そうしないと、解決するのがあまり楽しくない競合のリスクがあります。

履歴をより線形に保つために、マージよりもリベースを使用することを好みます。ローカルに2つのコミットAとB(Bは古い)があり、Bが今後の変更と競合する場合、リベースで競合を解決した後、Bをチェックアウトし、コンパイルをチェックし、テストを実行してから、Aに切り替えてすべてプッシュする必要があります。

それが、私が持っているすべてをできるだけ早くプッシュすることを好む理由です。

8
Dmitry Pavlenko

私は一般的にベストアンサーといくつかのコメントに同意しません。コミットもプッシュも、コードの品質について責任を負う必要はありません。

Svn時代では、誰もが同じブランチで働いています。コードの失敗はすぐに他の人に広まります。この場合、間違いなくコードの品質を保証する必要があります。それが、多くの企業や組織でsvnがgitに置き換えられている理由です。

典型的なGitワークフローとは何かを明確にする必要があります。マスターブランチに何らかの形で実行可能なソフトウェアのバージョンがあるとします。リリースブランチとしてマスターブランチを使用することを好む人もいれば、開発ブランチとして使用する人もいます。それはどうでもいい事です。機能を追加したり、バグを修正したりする必要があるときはいつでも、マスター(または別の)ブランチからブランチを作成します。この機能は、コードベースに大幅な変更を加えることなく処理できるように十分に小さくする必要があります。大きな変更の場合、ブランチの最後のレイヤーが十分に小さくなるように、ブランチのレイヤーを作成する必要があります。

各ブランチで小さな機能を追加する場合、同じブランチで多くの人が作業することはほとんどありません。複数の人が1つの機能で作業している場合、そのグループは非常に小さく、頻繁に通信する必要があるため、競合を簡単に修正する必要があります。 1つのコミットまたはプッシュに問題がある場合、あなたまたはあなたの小さなチームだけに問題があります。

次に、コードの品質を保証する必要があります。私の答えはプルリクエストです。 Githubで、コードを変更してプルリクエストを送信します。プルリクエストを送信するまでに、コードがテストをコンパイルしてパスできることを保証する必要があります。 Gitlabでは、コードを変更する前にマージリクエストを作成しますが、WIP(進行中)でマークします。次に、コードを変更します。 WIPマークを削除する前に、コードが良質であることを保証する必要があります。また、コードレビューアは保護の別のレイヤーになります。

ブランチで競合が発生することはほとんどありませんが、ブランチをベースブランチにマージすると発生する可能性があります。マージが発生する直前に修正する必要があります。

唯一のものはリベースに関連しています。多くの開発者は、マージの競合を送信する前にブランチをリベースして、gitコミット履歴を改善することを好みます。リモートにプッシュし、他の人がコードを使用した場合、リベースにより厄介な問題が修正されます。ただし、小さな機能を修正するだけのブランチで作業する場合は、とにかくブランチを使用する必要はありません。また、個人的には履歴を変更するため、リベースすることはあまり好きではありません。

したがって、私の結論は他の人と似ており、頻繁にコミットし、頻繁にプッシュしますが、理由は異なります。

1
Yifan Sun