1

git はこのような状況をどのように処理しますか。

git によって管理され、Github でホストされているプロジェクトには、多くの共同作業者がいます。プロジェクトで作業している 2 人のユーザーが、ローカル コンピューター上の同じファイルに変更を加えます。たとえば、両方ともスタイルシートで作業しているとします。そして、両者は最新の変更をコミットし、Github に送信します。

これは、スタイルシート内で両方が異なるものを変更した場合、1 人の作業のみが最新バージョンになり、他の作業は履歴に含まれるという問題は発生しません。

複数の人が同じファイルで作業しているときに新しい変更が失われるのを防ぐために、この状況がどのように処理されるかはよくわかりません。

誰がそれがどのように機能するか説明できますか?

4

3 に答える 3

3

Charlie Rudenstal の回答を補足するには: 最初の協力者のプッシュは成功します。2 番目の共同作業者のプッシュは、「拒否されました。早送りではありません」というメッセージで失敗します。次に、2 番目の共同作業者が最後の変更をフェッチし、それらを自分の変更とマージして (マージの競合を解決する可能性があります)、再度プッシュすると、成功します。

于 2012-07-30T11:31:41.080 に答える
0

github のサーバーに最初にプッシュした人が勝ちます。これはgitGithub ではなく で解決されます。次の人は、プッシュが拒否されたことを示すメッセージを受け取ります。

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://<url>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

http://gitref.org/remotes/#pushを参照してください

于 2012-07-30T11:30:15.820 に答える
0

最初のコラボレーターがすでにプッシュを行っている場合、2 番目のコラボレーターからのプッシュは拒否されます。2 番目の共同作業者は、最初の共同作業者から変更を加えてからgit fetchgit merge再度コミットをプッシュする必要があります。(またはgit pull、癖に注意してください http://longair.net/blog/2009/04/16/git-fetch-and-merge/

git merge可能な限り自動マージを試みます。自動マージできないファイルは競合として表示されます。これらは、競合するファイルを手動で編集するか、または を使用してマージツールを使用して、手動で解決する必要がありますgit mergetool

競合するファイルの内容は次のようになります。

<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

解決されたファイルは、解決済みとしてマークされ、 を使用してステージングされgit addます。マージ中に競合が発生した場合、共同作業者はgit commit変更をプッシュする前に作成する必要があります。

また。を使用した別のアプローチgit pull --rebase: いつ git pull --rebase を使用する必要がありますか?

于 2012-07-30T11:26:28.037 に答える