52

git での日常的な開発作業用のローカル ブランチがあります。私のワークフローは次のとおりです。

  1. local_branch で処理を行い、コミットします
  2. オリジン/マスターを取得
  3. origin/master からの新しいものに追いつくために local_branch をリベースします

すべて正常に動作しますが、私が遭遇した推奨事項のほとんどは、リベースが定期的に実行されるプライベート ブランチを「プッシュ」すべきではないと述べています。

ここでの問題は、この場合、ローカル ブランチがサーバーにバックアップされておらず、作業を保存する唯一の方法は、それを「プッシュ可能な」ブランチ (つまり、オリジン/マスター) にマージすることです。

この場合のワークフローに関する推奨事項は何ですか?

ありがとう!

更新:私が持っていた元の要件の1つ(外部ユーティリティの使用を避ける)は、不必要な制限であることに気付きました。

私の現在の解決策は、すべてのリポジトリをクラウド同期フォルダーに保存することです。これにより、無料でバックアップを取得できます。

4

7 に答える 7

52

--mirror オプションを使用して、個人のバックアップ リポジトリにプッシュします。

リモートとして追加します。

git remote add bak server:/path/to/backup/repo

バックアップを実行します。

git push --mirror bak

これにより、バックアップ リポジトリがアクティブなリポジトリのように自動的に表示されます。必要に応じて、ブランチが作成、削除、更新されます (強制/非早送りでも)。これにもエイリアスを作成できます。

git config alias.bak "push --mirror bak"

あとは、バックアップしたいときに「git bak」を実行するだけです。これを cron ジョブに投入することもできます。

于 2009-05-30T17:26:12.107 に答える
6

個人のブランチをプッシュしても問題ありません。人々があなたのブランチに基づいて作業を開始する可能性があり、リベースすると、彼らの変更はフローティングのままになるため、一般的にはお勧めできません。

私がしていることは、「これは私のブランチです。自己責任で使用してください」ということを示すために接頭辞を使用しています。たとえば、 fc-general-cleanupです。

于 2009-05-29T23:11:49.447 に答える
5

別のオプションは、「local_branch」を「オリジン」レポにプッシュすることですが、そのレポ内の独自のブランチ (「マスター」ではありません) にプッシュします。つまり、次のようになります。

git push origin local_branch:local_backup

次に、別のバックアップを作成する準備ができたら (そして、いくつかの作業とリベースを行った後)、元のリポジトリからバックアップ ブランチを削除してから、再度プッシュします。

git push origin :local_backup <=== は元のブランチを削除します

git push origin local_branch:local_backup

このようにして、「origin/master」からリベースされた後に「local_branch」をプッシュする際に問題が発生することはありません。

また、バックアップ ブランチの削除に神経質になった場合 (最終的に作業を "master" にコミットするまで)、いつでも新しい名前で新しいブランチにプッシュし続けることができます (例: "local_backup1"、"local_backup2" など)。 .

于 2009-05-29T02:13:44.167 に答える
2

リベースしているのと同じブランチにプッシュしても問題はありません。これらの図は、これが正常に機能する理由を示しているはずです。

これが、local_branchを分岐し、それに2、3のコミット(CおよびD)を行った後のコミットグラフのようになっているとしましょう。local_branchを分岐してから、他の誰かがorigin / masterに対して1つのコミット(E)を行いました。

A --B--E[オリジン/マスター]
      \
       \    
        \-C-D [local_branch]

次に、「git rebase origin / master」を実行すると、コミットグラフは次の図のようになります。「origin/master」は同じですが、「local_branch」がリベースされました。

A --B--E[オリジン/マスター]
           \
            \
             \-C-D [local_branch]

この段階で「gitpushoriginlocal_branch:master」を実行すると、単純な早送りになります。「origin/master」と「local_branch」は同じになります。

A --B --E --C --D [origin / master]、[local_branch]

これで、「local_branch」でさらに作業を行うことができます。最終的には、次のようなものが得られる可能性があります。

A --B --E --C --D --G--I[オリジン/マスター]
                     \
                      \
                       \-F --H [local_branch]

これは開始グラフによく似ていることに注意してください。このプロセスを何度も繰り返すことができます。

リベースしていない他のブランチにプッシュすることは避けてください。ここで問題が発生します(他のブランチでは、「origin / master」からリベースした後、「local_branch」の履歴が突然書き直されたように見えます)。

于 2009-05-29T01:38:56.140 に答える
2

すべてのブランチをプッシュする別のリモート リポジトリをセットアップできますか? 考慮すべきもう 1 つのことは、git リポジトリを含む、ローカル マシン上のすべて (重要) をバックアップすることです。

于 2009-05-29T01:09:00.443 に答える
1

Dropbox に依存して git リポジトリのすべてのファイルを同期するのではなく、 1 つのファイル (すべてのプライベート ブランチを含む)git bundleのみを生成する を使用し、そのファイルを DropBox と同期します。 「Git with Dropbox」を参照してください。

ローカル Git リポジトリのバックアップ」で、Yarsは Dropbox との同期エラーについて言及しました。

于 2012-09-05T07:50:09.837 に答える
1

これが私がすることです。しかし、これはプライベートではありません。これは、自分自身とコラボレーションできるようにするためです (いわば)。2 つ以上のボックスの同じブランチで作業できます。他の人が共有レポにアクセスできれば、私がブランチで行っている作業を見ることができます。もちろん、私のホーム リポジトリでは、他の誰もアクセスできないため、まだ非公開です。github では、世界中の人が私のものを見ることができました。彼らが本当に気にかけているように。;)

于 2009-05-29T02:01:09.543 に答える