[解決済み] gitでマージした後にgit-svnでdcommitするのは危険ですか?
質問
git-svn を試してみようと思った動機は、マージとブランチが簡単にできることです。そして、man git-svn(1) に書いてあることに気づきました。
dcommit する予定のブランチに対して git-merge や git-pull を実行することは推奨されません。 を実行することはお勧めできません。Subversion は、合理的で有用な方法でマージを表現しません。 そのため、Subversion を使用しているユーザーは、あなたが行ったマージを見ることができません。 を使用しているユーザーは、あなたが行ったマージを見ることができません。さらに、SVG のミラーブランチである git ブランチからマージしたりプルしたりすると、dcommit は間違ったブランチにコミットしてしまうかもしれません。 は間違ったブランチにコミットしてしまうかもしれません。
これは、svn/trunk (またはブランチ) からローカルブランチを作成し、ハックして svn/trunk にマージし、それから dcommit できないということですか? 1.5.x以前のsvnでのマージが常にそうであったように、svnユーザーは同じ混乱を見ることになると理解していますが、他の欠点はありますか?最後の文は私も心配です。人々は日常的にこの種のことを行っているのでしょうか?
どのように解決するのですか?
実は、もっといい方法を見つけたんです。
--no-ff
オプションでさらに良い方法を見つけました。
以前使っていたスカッシュのテクニックはもう必要ないのです。
私の新しいワークフローは以下のようになりました。
-
私がコミットする唯一のブランチである "master" ブランチと、SVN リポジトリをクローンする (
-s
リポジトリに標準的な SVN レイアウトがあると仮定します。trunk/
,branches/
そしてtags/
):git svn clone [-s] <svn-url>
-
私はローカルブランチ "work"で働いています(
-b
はブランチ "work" を作成します)git checkout -b work
-
work"ブランチにローカルにコミットする (
-s
でコミットメッセージの署名をします)。続いて、3つのローカルコミットを行ったとします。... (work)$> git commit -s -m "msg 1" ... (work)$> git commit -s -m "msg 2" ... (work)$> git commit -s -m "msg 3"
SVNサーバーにコミットします。
-
[最終的には] SVN サーバーにコミットされたくない変更を隠しておく (コンパイルを加速して特定の機能に集中したいので、メインファイルでいくつかのコードをコメントしたことがよくあります)
(work)$> git stash
-
masterブランチをSVNリポジトリで再ベースする(SVNサーバーから更新する場合)。
(work)$> git checkout master (master)$> git svn rebase
-
作業用ブランチに戻り、masterでリベースする
(master)$> git checkout work (work)$> git rebase master
-
などを使って、すべてがうまくいっていることを確認します。
(work)$> git log --graph --oneline --decorate
-
さて、いよいよ "work" ブランチの 3 つのコミットをすべて "master" にマージする番です。
--no-ff
オプションを使用します。(work)$> git checkout master (master)$> git merge --no-ff work
-
ログの状態に気づくことができます。
(master)$> git log --graph --oneline --decorate * 56a779b (work, master) Merge branch 'work' |\ | * af6f7ae msg 3 | * 8750643 msg 2 | * 08464ae msg 1 |/ * 21e20fa (git-svn) last svn commit
-
ここで、おそらくあなたは(
amend
を編集したいと思うでしょう (さもなければ、彼らは "ブランチ 'work' をマージする " というメッセージを含む単一のコミットしか見ることができません)。(master)$> git commit --amend
-
最後にSVNサーバーにコミットする
(master)$> git svn dcommit
-
仕事に戻り、最終的には隠したファイルを復元する。
(master)$> git checkout work (work)$> git stash pop
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】既存のGitブランチをリモートブランチに追従させる?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] mavenのpomにscmの情報を追加する目的は何ですか?
-
[解決済み] EclipseのSVNプラグイン、SubclipseとSubversiveの長所と短所を教えてください。[クローズド]です。
-
[解決済み] Apache Subversion における `svn add` と `svn commit` の違いについて
-
[解決済み] SVNエラー - 作業コピーではありません
-
[解決済み] SVNリポジトリURLの変更
-
[解決済み] Subversionでツリーのコンフリクトが発生するのはなぜですか?
-
[解決済み] 新しいブランチを作成するにはどうすればよいですか?
-
[解決済み] SVNアップグレード作業コピー
-
[解決済み] gitでマージした後にgit-svnでdcommitするのは危険ですか?
-
[解決済み] TortoiseSVN でソース管理からフォルダを削除するにはどうしたらいいですか?