5

バックアップとして使用できるgitまたはmercurialで非表示のブランチを作成することは可能ですか?たとえば、1日の終わりに未完成の作業がありますが(構文エラーが残っている場合もあります)、残っている混乱について他の人に迷惑をかけずに、オンラインのリポジトリにバックアップしてほしいと思います。

4

11 に答える 11

7

デフォルトgit clonegit fetch/mergeは、refs/heads/* の参照のみをダウンロードします。したがって、他の場所にプッシュしたものは、他の人によってダウンロードされることはありません (明示的に要求するか、のようなことをしない限りgit clone --mirror)。したがって、たとえば、次のことができます。

git push origin HEAD:refs/koen/my_work

現在のコミットをプッシュします。その完全な refspec を使用して、別のチェックアウトからプルすることもできます。

git pull origin refs/koen/my_work

HEAD のプッシュを自動化するには、次のようなことができます

[remote "origin"]
    url = git@github.com:pieter/gitx.git
    push = :
        push = refs/heads/*:refs/koen/*

これにより、他の人に迷惑をかけることなく、すべてのブランチがリモートにプッシュされます。また、使い慣れたデフォルトのプッシュ動作も維持されます。不要な場合は、push = :行を削除してください。

于 2009-04-21T16:10:03.747 に答える
4

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

'backup'というリモートリポジトリがあるとします。たとえば、

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

その後、バックアップは同じくらい簡単です

git push backup

いくつかの注意:

  • --mirrorリモートリポジトリを追加するときに使用しなかった場合--mirrorは、プッシュコマンドで使用します
  • リモートリポジトリは「ベア」リポジトリである必要があります(プッシュしているため)
  • チェックアウトgit pushgit remoteに関するヘルプ--mirror
于 2009-04-21T13:15:41.577 に答える
2

これは、リポジトリのリモート クローンが 2 つある場合に実現できます。

stable
unstable

機能が完了するまで、不安定版 (バックアップ) にプッシュします。機能が完成したら、ブランチを安定版にプッシュします。泡立てて、すすぎ、繰り返します。

于 2009-04-21T11:40:49.307 に答える
1

TortoiseHg の最新バージョンでは、変更を棚上げすることができます。

手短に:

保留された変更は、保留を解除するまで作業ディレクトリから物理的に削除されます。これは、保留中の変更がなくなっている間に、プロジェクトをビルドしてテストを実行できることを意味します。これは、コミットされた変更が有効かどうかをテストできるため、ビルド時に変更を選択するよりも安全です。

変更を棚上げすることは、部分的に完了した作業を削除して、行っている他の変更のデバッグを妨げないようにするのにも役立ちます。

于 2009-04-21T12:18:23.273 に答える
1

Mercurial では、マージするときに、「未完成の作業を保存するためだけに」コミットを含むすべての変更セットをマージします。ツリーで終了させたくない場合は、コミットしないでください。

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

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

于 2009-04-21T11:16:41.160 に答える
1

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

次に、public repositoryを持っています。これは、作業用リポジトリがないことを意味します。作業が安定したら、プライベート リポジトリからこのパブリック リポジトリ (たとえば、 repo.or.czGitHub、またはGitoriousなどの git ホスティング サイトのいずれかにホストされている可能性があります) にプッシュします。プライベート開発リポジトリからこの公開公開リポジトリにブランチのサブセットのみをプッシュできます (たとえば、Git メンテナーである Junio C Hamano は、フィーチャー ブランチをパブリックリポジトリにプッシュしません)。この公開リポジトリは、他の人がフェッチする場所です。git.git

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

于 2009-04-25T20:51:57.597 に答える
1

これは、リポジトリがどのように表示されるか、およびどのような権限を持っているかに大きく依存すると思います。原則として、ハブリポジトリにプッシュする「保存領域」として使用する一時ブランチが必要なだけです---あなたはすでにそれを知っていると思います。ブランチに「見えない」というフラグを立てる一般的な方法はありますか? 私はそうは思いませんが、ローカルのヘッド参照を反対側の奇妙な名前の参照にプッシュして実験することはできます。

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

これは「refs/remotes/tmp/master」を作成しようとします。これは有効な refname ですが、通常はブランチと見なされるものではありません。たとえば、gitweb は、refs/heads/ の下のブランチの 1 つの履歴に表示される場合、そのような ref を表示しますが、すべてのリモート ref のリストは表示しません。

または、弾丸を噛んで、「probably-broken-use-at-your-peril」と呼ばれる目に見えるブランチにプッシュします;)

于 2009-04-21T23:02:38.560 に答える
0

それは実際には SCM の目的ではありません。サーバーにアップロードするためのrsyncのようなものは、より良い考えでしょうか?

于 2009-04-21T10:56:49.927 に答える
0

私たちの Mercurial プロジェクトでは、複数のブランチを使用しています。デフォルトのブランチは「トランク」のようなものです。機能を開始するたびに、分岐してそこで開発します。コミット、プッシュ、別の場所に移動、プル、コミット、プッシュ。デフォルトのブランチは変更されず、他の誰もが私のブランチに興味を持ちません。完了したら、ブランチをデフォルトにマージします。

于 2009-04-23T16:11:43.887 に答える