2009-04-21 8 views
5

バックアップとして使用できるgitまたはmercurialで非表示のブランチを作成することはできますか?たとえば、未完成の作業(構文エラーが残っていることさえあるかもしれません)がありましたが、残された混乱について他人を悩ますことなく、オンラインでリポジトリにバックアップしたいと考えています。バックアップ用の専用のmercurial/gitブランチ?

答えて

0

これは実際にはSCMの目的ではありません。たぶんrsyncのようなものをサーバーにアップロードする方が良いアイデアでしょうか?

1

水銀でマージすると、のすべての変更セットがにマージされます。これらのコミットは「未完了の仕事を保存するだけです」というコミットを含みます。あなたがそれらを木に終わらせたくないならば、それらを託すことはありません。

私が知る限り、デフォルトの動作は同じで、それらを削除するためにコミット履歴を編集するのも面倒です。

したがって、rsyncはより良いオプションのように見えます。

+1

これは、パーソナルブランチでの開発が一般的であり、普及している理由で、分散型VCSを大きくする理由の大半です。コミットする前に、本番ブランチに変更したり、見た目をどのように再構築したりマージしてから、必要な変更だけをプッシュすることができます。Rsyncは、この問題を処理するには不適切な選択です。 –

2

リポジトリの2個のリモート・クローン持っていた場合は、これを実現できます。この機能を終了するまで不安定に

stable 
unstable 

プッシュ(バックアップ)を。機能が終了したら、ブランチを安定させてください。泡立ち、すすぎ、繰り返します。

1

TortoiseHgの最新バージョンは、shelve your changesです。一言で言えば

棚上げ変更は物理的にunshelveあなた までの作業ディレクトリから を削除しています。これは、 プロジェクトをビルドし、その上でテストを実行することができることを意味します。 変更がなくなりました。 をコミットする変更が であるかどうかをテストすることができるので、変更時に をビルド時に選択するよりも安全です。変更をシェルビング

はまた、あなたが 作っている、それは その他の変更のデバッグに干渉しないことを確認してください に、部分的に完了した作業を取り除く するのに便利です。

3

Gitでは、リポジトリを非常に簡単にミラーリングできます。

「バックアップ」と呼ばれるリモートのリポジトリがあるとします。リモートリポジトリを追加するときに、あなたの中に--mirrorを使用し、--mirrorを使用しなかった場合

  • :、

    git remote add --mirror backup server.com:/home/koen/backup_repo.git 
    

    は、次にバックアップするように簡単

    git push backup 
    

    など、いくつかのノートですプッシュコマンド
  • リモートリポジトリは「裸の」リポジトリにする必要があります(それを押し込んでいるので)
  • チェックアウトレフリー/ヘッド/ *のデフォルトgit clonegit fetch/mergeのみダウンロード、参考文献によって--mirror
7

に関するgit pushgit remoteヘルプ。他の場所にプッシュするものは、明示的に質問したり、git clone --mirrorのような操作をしない限り、他の人にダウンロードされません。たとえば、次のようにすることができます。

git push origin HEAD:refs/koen/my_work 

現在のコミットをプッシュします。その完全なrefspecを使用して、あなたはまた、別のチェックアウトからそれを引くことができます。

git pull origin refs/koen/my_work 

は、あなたの頭を押して自動化するには、悩まずに、リモートにすべての枝をプッシュします

[remote "origin"] 
    url = [email protected]:pieter/gitx.git 
    push = : 
     push = refs/heads/*:refs/koen/* 

ような何かを行うことができます他の誰か。また、これまで慣れ親しんでいたデフォルトのプッシュ動作を維持します。必要がない場合は、push = :行を削除してください。

1

これは、リポジトリがどのように表示され、どのような権限を持っているかによります。原則として、あなたはちょうどあなたがハブのrepoにプッシュする "保存領域"として使用する一時的なブランチが必要---私はあなたがすでにそれを知っていると思う。ブランチに「不可視」とフラグを立てる一般的な方法はありますか?あなたはもう一方の端の奇妙な名前の参照文献にローカルのヘッド参照を押して実験ができるが、私は、例えば、そうは思わない:

git push central refs/heads/master:refs/remotes/tmp/master 

これは、「レフリー/リモコンを/ tmp /マスター」を作成しようとしますこれは有効なリファレンスですが、通常ブランチと見なされるものではありません。例えば、gitwebは、refs/heads /の下のブランチの履歴に現れているが、すべてのリモート参照のリストを表示しない場合、そのようなrefを表示します。我々は複数のブランチを使用し、当社のmercurialのプロジェクトで)

0

を、

また、ちょうど弾丸をかむと、「おそらく壊れ利用・アット・ご-危険」と呼ばれる目に見えるブランチにプッシュします。デフォルトのブランチは "トランク"のようなものです。私がフィーチャーを始めるたびに、そこから分岐して開発する。私はコミットする、押す、別の場所に行く、プル、コミット、プッシュ。デフォルトのブランチはuntouchのままで、他のすべてのブランチはブランチを捕まえることはありません。私が終わったら、ブランチをデフォルトにマージします。 Gitのでは

1

、あなたは通常、それが作業ディレクトリを持っていることを意味プライベートリポジトリ、非裸を持っています。新しいコミットを作成し、パッチを適用し、他のリポジトリからプル/フェッチします。このリポジトリはプライベートマシン上でホストされています。

は、その後、あなたはそれが作業リポジトリを持っていないことを意味裸 公共リポジトリを、持っています。この公開リポジトリ(例: repo.or.czGitHubまたは Gitoriousのようなgitホスティングサイトでホストされている場合があります)は、作業が安定したときにプライベートリポジトリからプッシュします。あなたはこの 公共出版リポジトリ(例えば、Gitのメンテナ、Junio C浜野ため、公共 git.git repositorisに機能ブランチをプッシュしていません)にご プライベート開発リポジトリから枝だけ サブセットをプッシュすることができます。この公開リポジトリは、他の人がフェッチする場所です。

この分離には、パブリックリポジトリにプッシュされないコミット(たとえば、 "git commit --amend"を使用)を修正できるという利点があります。それ以外の場合は、プライベート開発リポジトリにのみ存在する履歴の一部を書き換えます。これはプライベートではありませんが

1

、これは私が何をすべきかである(それは迷惑ではないですので、社内の誰もが、ちょうどないデフォルトでは、それらに得ることができます):〜/ .gitconfig

 
[alias] 
    backup = !git push -v origin +refs/heads/*:refs/wip/`git config --get user.email`/* 

ので、その方法は、あなたの地元のレポの実行でいつでもできます。

git backup 

(とにかくレフリー/頭の下に)あなたの地域の支店のすべては、引用文献の下に「起源」レポにプッシュされます/ wip/your_email/nameスペース、無条件(push -fと同じ)。

原点/マスターにプッシュする準備ができたら、これを使用して進行中の作業をバックアップすると、プッシュは非常に高速になります。ほとんどの(すべての)SHA1オブジェクトは既にオリジンサーバーで実行します。

オリジンリポジトリがガベージコレクションを行うために、バックアップをパージする必要があることに注意してください。参照:

 
git ls-remote origin refs/wip/`git config --get user.email`/* 

バックアップにプッシュしたブランチのリストが表示されますので、何をクリーニングするかを自動化することができます。

3

共有リポジトリにプッシュするものは、普遍的に見える/利用可能になります。あなたの2つの単純なオプションは以下のとおりです。

  • は別の場所であなた自身の第二のリポジトリを作成し、毎日の終わりにそこにあなたの開発ブランチを押してください。あなたは開発ブランチを他の人が使っている安定したものにプッシュしません。

  • 第2のリポジトリ全体を必要としないが、その日の終わりにあなたの作業に多くの時間を費やす2番目のオプションは、作業用のパッチをエクスポートすることです。標準のgit電子メールパッチメソッドは、そのパターンをバックアップする場合に備えて、すべてのコミットが維持されるようにします。パッチを圧縮し、どこかにアップロードしてください。

関連する問題