web-dev-qa-db-ja.com

Gitでプライベートブランチをバックアップする方法

Gitでの日々の開発作業のためのローカルブランチがあります。私のワークフローは:

  1. Local_branchで何かを行い、コミットする
  2. 取得元/マスター
  3. Origin /マスターからの新しいものに追いつくためにlocal_branchをリベースします

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

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

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

ありがとう!

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

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

48
Art

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

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

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

バックアップを行います。

git Push --mirror bak

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

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

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

50
Pat Notz

別のオプションは、 "local_branch"を "Origin"リポジトリにプッシュすることですが、それはそのリポジトリ内の独自のブランチ( "master"ではない)です。つまり、

git Push Origin local_branch:local_backup

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

git Push Origin :local_backup <=== Originからブランチを削除します

git Push Origin local_branch:local_backup

これにより、「local/branch」が「Origin/master」からリベースされた後、「local_branch」をプッシュするときに問題が発生しなくなります。

バックアップブランチを削除すると緊張する場合(最終的に作業を「マスター」にコミットするまで)、常に新しいブランチ(たとえば、「local_backup1」、「local_backup2」など)にプッシュし続けることができます。 。

4
Dan Moulding

個人のブランチをプッシュすることに何の問題もありません。人々はブランチに基づいて作業を開始する可能性があり、リベースしても変更はフローティングのままであるため、通常は推奨されません。

プレフィックスを使用して、「これは私のブランチです。自分の責任で使用してください」のように記述します。fc-general-cleanupのようにします。

4
FelipeC

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

これは、local_branchを分岐し、それにいくつかのコミットを行った後(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] 

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

 A-B-E-C-D [元/マスター]、[local_branch] 

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

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

これは最初のグラフによく似ています。このプロセスを何度も繰り返し続けることができます。

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

2
Dan Moulding

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

1
Cebjyre

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

" ローカルGitリポジトリのバックアップ "で、 Yars がDropboxとの同期エラーがあることを述べました。

1
VonC

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

1
Don Branson