svn で git を効果的に使用するためのヒントを提供してください。あなたの「ベストプラクティス」は何ですか?
4 に答える
クローンを作成するときは、 を使用します--prefix=svn/
。より良いブランチ名を作成します。
また、 orを実行するときは--trunk
、、、--tags
および--branches
引数を無視しないでください。clone
init
フェッチは時間のかかるステップの 1 つであるため、バックグラウンドで実行する cron ジョブをセットアップしgit svn fetch
ます。フェッチは作業ブランチに影響を与えないため、これは安全です。
( 背景情報git svn fetch
: このコマンドは実行するたびに最初に実行されるgit svn rebase
ため、事前にこのステップを実行することで、git svn rebase
通常は呼び出しが速くなります。fetch
コマンドは SVN コミットをダウンロードし、git-svn によって管理される特別なブランチに貼り付けます。これらのブランチはを実行すると表示可能git branch -r
になり、上記の手順を実行すると、「svn/」で始まります。)
の使用方法を確認してくださいgit reflog
。私は何度かgit svn dcommit
死んでしまい (通常は巨大なものをチェックインしようとしたため)、コミットが失われたように見えました。いずれの場合も、コミットは reflog で簡単に見つかりました。
ここに私が最近学んだいくつかがあります:
git svn rebase
する前に必ずするgit svn dcommit
- あなたがやっているときは
dcommit
、一時的なステージングブランチからそれをしてください - あなた(またはgit)が台無しになった場合、ブランチを削除して最初からやり直すだけで回復するのがはるかに簡単です
svn dcommit
大規模なコミットの途中で が死亡し、すべての履歴が失われたように見える場合は、次のようにします。
回復方法:
まず、 .git/logs/HEAD を開きます
git リポジトリのヘッドであるコミットのハッシュを見つけます。コミットメッセージを覚えていて、それを理解できることを願っていますが、それはかなり明白なはずです
うんざりした作業ディレクトリに戻ります。
git reset --hard <ログからのハッシュ>
これにより、作業ディレクトリが git-svn dcommit を実行する前の場所に戻ります。それで:
git-svn リベース git-svn dcommit
コミットを拒否できるコミット後のフックが SVN リポジトリにある場合、git svn dcommit
コミットが最初に拒否されたときにコミットの処理が停止し、git reflog から残りのコミットを回復する必要があります。
git rebase -i
実際、上記の問題は、拒否されたコミットを修正しようとしているときに、カウカーが正しく実行されていなかったために発生したと思います。しかし、reflog のおかげで、すべてを回復することができました。
Subversion と Git を並行して使用する方法について少しブログを書いており、いくつかの基本的なスクリーンキャストも公開しています。ここにすべてを集めました: http://www.tfnico.com/presentations/git-and-subversion
要約してみます:
- がんばれ!試してみても損はありません:)
- 小さな Git プロジェクトから始めて、最初に学習します。
- マスターするまでコマンドラインに固執してください。GUIツールはあなたを混乱させるかもしれません.
- 可能であれば、1 回限りの移行を行い、小さなプロジェクトから始めて、一度に 1 つのプロジェクトで SVN を置き去りにします。
- Git と SVN を一緒に使用する必要がある場合は、ブランチなど、Git から得られる多くの利点を放棄する必要があることに注意してください。
- あなたが 1 人の Git ユーザーである場合は、自分で git-svn リベースと dcommit を行ってください。
- 複数の Git コラボレーターがいる場合は、SVN からプルするだけの中央の Git/SVN をセットアップし、各 Git ユーザーは直接 SVN に戻ります。詳細はこちら。