0

今のところ、少なくとも2台のマシン間で「同期を処理」するはずのbonobo gitサーバーがあります。

それは正常に機能していましたが、最近、1 つの大きな問題と git 自体に関連する 2 つ目の問題に遭遇しました。

  1. 色あせた「非早送り」の問題を起こさずに各クライアントから単純にプッシュすることはできません.bonoboとベアサーバーの問題だと思いますが、その作成者は違いを簡単に.

    以下はコピーペーストではありませんが、問題が発生したときに使用するコマンドであり、思い出す限り、警告は次のようになります。

    git push -u "server"
    ! [rejected]        server/master     -> master  (non-fast-forward)
    
  2. 今日、「非早送り」の問題を起こさずに、あるクライアントから別のクライアントにフェッチすることさえできません。次に、問題#1のためにサーバーにプッシュし、マシン上のサーバーからプルするために機能する唯一のオプションであるミラーオプションを使用して、そこからサーバーにプッシュしようとしました。驚いたことに、それはうまくいきました!しかし、他のマシンからフェッチまたはプルしようとすると、問題は解決しません。ここでの私の問題は次のとおりです。

    以下は、 Git Extensionsからの単なるコピー & ペーストです。

    git fetch --progress "client" 
    Done
    From \\\CLIENT\project\git
    ! [rejected]        master     -> client/master  (non-fast-forward)
    

    実際にを使用してこれを修正しましgit fetch -f "client"たが、何が起こったのかまだわかりません。

免責事項:今、私はすでにgit-scm.comにアクセスして、地獄のgitがどのように機能するかを詳細に学びます。結局のところ、「すべてを完全に同期」しようとするべきではないかもしれません...

--

編集:明らかな「前に引っ張らない」問題に加えて、これが潜在的に発生する可能性のある2つの理由を見つけましたが、私の場合、修正に役立たなかったものはありません:rebaseすでに他の場所で複製されている過去のコミットを編集するために使用するか、別の名前で同じブランチを持っています、これはmaster少なくとも発生する必要があります。この後者は非常に理にかなっていますが、それが時々機能し、いくつかのプッシュ後に機能しなくなることを除いて. さらに、フェッチ側では、 を使用してfetch -f、ブランチを壊しませんでした。そうではありませんでした。

4

2 に答える 2

2

プッシュする前にクライアントを更新するか (git pullなど)、強制プッシュを使用する ( git push --force) 必要がありますが、その場合、リモート側でコミットが失われ、non-fast-forward他のクライアントでメッセージがトリガーされる可能性があります。

于 2012-02-28T14:48:48.253 に答える
-3

約束したとおりにリソースを読んだ限り、gitのあらゆる側面に100%自信を持って対処できるとは言えません。それでも、私はついにここで私の問題の解決策を見つけることができました、そしてそれは少なくとも1ヶ月間安定しています。

第1号(早送りではないもの)について、3つの原因を突き止めました。

私は主にボノボフォーラムからコピーします:

  1. git commit --ammend

    私は時々これを使用しますが、コミットをプッシュしてから修正してもう一度プッシュしようとすると、受け入れられないことは間違いありません。この問題を回避する唯一の方法は、プッシュを上書きすることです。git push --mirror

  2. 古いコミットをチェックアウトする

    ローカルとサーバーの両方にブランチがあり、ローカルブランチがサーバー内の同じブランチの前の履歴のどこかにある場合、プッシュは失敗します。これには簡単な解決策があります。プッシュされたものよりも新しいまたは新しいコミットをチェックアウトします。

  3. 競合

    多くの人が言ったように、マージします。同じブランチ(通常はマスター)が異なる場所にある場合、一方のマシンが最初にマージせずにサーバーにプッシュした場合、もう一方のマシンはプル、マージする必要があり、その後、正常にプッシュできます。

この3番目のポイントは、それが本当に奇妙になると思うところです...裸のリポジトリでは、ブランチやタグの一貫性を追跡しないため、マージは必要ないはずです。ブランチやタグを登録するだけです。それは。ともかく...

2号では、これら3つの原因の1つである可能性が最も高いです。

于 2012-04-09T18:13:41.580 に答える