これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド git-svn です。
プログラム:
NAME
git-svn - Subversion リポジトリと Git 間の双方向操作
SYNOPSIS
git SVN [オプション] [引数]
DESCRIPTION
git SVN は、Subversion と Git の間の変更セットの単純なパイプです。 それは、
Subversion と Git リポジトリ間の双方向の変更フロー。
git SVN 一般的な手順に従って、標準の Subversion リポジトリを追跡できます。
--stdlayout オプションを使用した「トランク/ブランチ/タグ」レイアウト。 ブランチをたどることもできます。
-T/-t/-b オプションを使用した任意のレイアウト内のタグ (オプションを参照) INIT 以下、また
コマンド)。
(上記のいずれかの方法を使用して) Subversion リポジトリを追跡すると、Git リポジトリ
Subversion から次の方法で更新できます。 フェッチ コマンドと Subversion によって Git から更新されました
dコミット
コマンド
INIT
追加のメタデータ ディレクトリを使用して空の Git リポジトリを初期化します。 git SVN.
Subversion URL はコマンドライン引数または完全な URL として指定できます。
-T/-t/-b への引数。 オプションで、操作対象のターゲット ディレクトリを指定できます。
XNUMX 番目の引数として。 通常、このコマンドは現在のディレクトリを初期化します。
-T 、 --trunk= 、-t 、 --tags= 、
-b 、 -- ブランチ = 、-s、--stdlayout
これらは、init のオプションのコマンドライン オプションです。 これらの各フラグは以下を指すことができます
相対リポジトリ パス (--tags=project/tags) または完全な URL
(--tags=https://foo.org/project/tags)。 複数の --tags および/またはを指定できます。
--branch オプション (Subversion リポジトリにタグまたはブランチが配置される場合)
複数のパスの下にあります。 オプション --stdlayout は、設定を簡略化する方法です。
トランク、タグ、ブランチを相対パスとして使用します。これは Subversion のデフォルトです。 もしあれば
他のオプションも同様に指定されている場合は、それらが優先されます。
--no-メタデータ
をセットする メタデータなし [svn-remote] 設定のオプション。 このオプションはそうではありません
お勧めします、読んでください svn.noメタデータ 使用する前にこのマンページのセクション
このオプション。
--use-svm-props
をセットする useSvmProps [svn-remote] 設定のオプション。
--use-svnsync-props
をセットする useSvnsyncProps [svn-remote] 設定のオプション。
--rewrite-root=
をセットする リライトルート [svn-remote] 設定のオプション。
--rewrite-uuid=
をセットする UUIDを書き換える [svn-remote] 設定のオプション。
--ユーザー名=
SVN が認証を処理するトランスポート (http、https、およびプレーン svn) の場合、
ユーザー名を指定します。 他のトランスポート (例: svn+ssh://) の場合は、以下を含める必要があります。
URL 内のユーザー名 (例: svn+ssh://)[メール保護]/事業
--prefix=
これにより、リモートの名前の前に付加されるプレフィックスを指定できるようになります。
トランク/ブランチ/タグを指定します。 プレフィックスには自動的に含まれません。
末尾のスラッシュが必要な場合は、必ず引数にスラッシュを含めてください。
欲しい。 --branches/-b が指定されている場合は、接頭辞の末尾にスラッシュを含める必要があります。
どのような場合でも、接頭辞 (末尾のスラッシュ付き) を設定することを強くお勧めします。
SVN 追跡参照は「refs/remotes/$prefix/」に配置されます。", which is
互換性のあります Gitの 自分の リモートトラッキング 参照 レイアウト (refs/リモート/$remote/).
プレフィックスを設定すると、共有する複数のプロジェクトを追跡する場合にも役立ちます。
共通リポジトリ。 デフォルトでは、プレフィックスは次のように設定されています。 元/.
注意
Git v2.0 より前は、デフォルトのプレフィックスは「」 (プレフィックスなし) でした。 これはつまり、
SVN 追跡参照は「refs/remotes/*」に置かれていましたが、これは方法と互換性がありません。
Git 独自のリモート追跡参照が整理されています。 それでも古いものが必要な場合は、
デフォルトでは、コマンドラインで --prefix "" を渡すことで取得できます。
(Perl の Getopt::Long が v2.37 未満の場合、--prefix="" は機能しない可能性があります)。
--ignore-paths=
に渡されたとき INIT or この正規表現は設定として保存されます
鍵。 見る フェッチ の説明のために --ignore-paths.
--include-paths=
に渡されたとき INIT or この正規表現は設定として保存されます
鍵。 見る フェッチ の説明のために --include-paths.
--no-minimize-url
複数のディレクトリを追跡する場合 (--stdlayout、--branches、または --tags を使用)
オプション)、git svn はルート (または許可される最高レベル) への接続を試みます。
Subversion リポジトリの。 このデフォルトにより、次の場合に履歴をより適切に追跡できるようになります。
プロジェクト全体がリポジトリ内で移動されますが、問題が発生する可能性があります。
読み取りアクセス制限が設けられているリポジトリ。 通過
--no-minimize-url git svn が URL をそのまま受け入れられるようにします。
上位のディレクトリに接続します。 XNUMX つのみの場合、このオプションはデフォルトでオフになります。
URL/ブランチは追跡されます (あまり役に立ちません)。
フェッチ
追跡している Subversion リモートからフェッチされていないリビジョンをフェッチします。 の名前
$GIT_DIR/config ファイルの [svn-remote "..."] セクションはオプションとして指定できます。
コマンドライン引数。
これにより、必要に応じて rev_map が自動的に更新されます (「 $GIT_DIR/svn/**/.rev_map.* in
詳細については、以下の「ファイル」セクションを参照してください)。
- 現地時間
Git コミット時刻を UTC ではなくローカル タイムゾーンで保存します。 これにより、 git ログ
(--date=local を指定しなくても) ローカルの svn ログと同じ時間を表示します。
タイムゾーン。
これは、Subversion リポジトリとの相互運用を妨げません。
からクローンを作成しますが、ローカルの Git リポジトリからクローンを作成できるようにしたい場合は、
他の人のローカル Git リポジトリと相互運用する場合は、これを使用しないでください
オプションを使用するか、両方とも同じローカル タイム ゾーンで使用する必要があります。
- 親
現在の HEAD の SVN 親からのみフェッチします。
--ignore-paths=
これにより、スキップを引き起こす Perl 正規表現を指定できます。
SVN からのチェックアウトからの一致するすべてのパス。 の --ignore-paths オプションは一致する必要があります
すべてのための フェッチ (自動取得を含む) , dコミット, リベース、等)
特定のリポジトリ上で。
設定キー: svn-remote。 .ignore-paths
ignore-paths 構成キーが設定されており、コマンドライン オプションも設定されている場合
指定すると、両方の正規表現が使用されます。
例:
フェッチごとに「doc*」ディレクトリをスキップします
--ignore-paths="^doc"
第 XNUMX レベルのディレクトリの「ブランチ」と「タグ」をスキップします。
--ignore-paths="^[^/]+/(?:枝|タグ)"
--include-paths=
これにより、包含を引き起こす Perl 正規表現を指定できるようになります。
SVN からのチェックアウトからの一致するパスのみを抽出します。 の --include-paths オプションはすべきです
あらゆるものにマッチする フェッチ (自動取得を含む) , dコミット, リベース,
など) 特定のリポジトリ上で。 --ignore-paths よりも優先されます --include-paths.
設定キー: svn-remote。 .include-paths
--ログウィンドウサイズ=
フェッチSubversion 履歴をスキャンするときのリクエストごとのログ エントリ。 デフォルトは
100. 非常に大規模な Subversion リポジトリの場合、より大きな値が必要になる場合があります。
/フェッチ 妥当な時間内に完了すること。 ただし、値が大きすぎると、
メモリ使用量が増加し、リクエストのタイムアウトが発生します。
Active Runs INIT および フェッチ。 のベース名に基づいてディレクトリが自動的に作成されます。
渡された URL。 または XNUMX 番目の引数が渡された場合。 ディレクトリが作成されます
そしてその中で働くのです。 これは、次のすべての引数を受け入れます。 INIT および フェッチ コマンド
受け入れる; 例外として --fetch-all および - 親。 リポジトリのクローンを作成した後、
フェッチ コマンドは作業ツリーに影響を与えることなくリビジョンを更新できます。
と リベース コマンドは作業ツリーを最新のもので更新できるようになります。
変更。
--preserve-empty-dirs
空のディレクトリごとにローカル Git リポジトリにプレースホルダー ファイルを作成します
Subversion から取得しました。 これには、削除することによって空になるディレクトリが含まれます。
Subversion リポジトリ内のすべてのエントリ (ディレクトリ自体は除く)。 の
プレースホルダー ファイルも追跡され、不要になった場合は削除されます。
--プレースホルダーファイル名=
--preserve-empty-dirs によって作成されるプレースホルダー ファイルの名前を設定します。 デフォルト:
「.gitignore」
リベース
これにより、現在の HEAD の親 SVN からリビジョンがフェッチされ、現在の HEAD がリベースされます。
(SVN にコミットしていない) SVN に対して動作します。
これは svn update または git プル 線形履歴を保存することを除いて
git リベース git マージ dコミットを容易にするため git SVN.
これは、次のすべてのオプションを受け入れます。 git SVN フェッチ および git リベース 受け入れる。 しかし、
--fetch-all すべての [svn-remote] ではなく、現在の [svn-remote] からのみ取得します。
定義。
いいね git リベース; これには、作業ツリーがクリーンで、コミットされていないものが存在しないことが必要です。
変更。
これにより、必要に応じて rev_map が自動的に更新されます (「 $GIT_DIR/svn/**/.rev_map.* in
詳細については、以下の「ファイル」セクションを参照してください)。
-l、--local
リモートから取得しないでください。 走るだけ git リベース 最後にフェッチされたコミットに対して
上流の SVN。
dコミット
現在のブランチからの各差分を SVN リポジトリに直接コミットしてから、
リベースまたはリセット (SVN とヘッドの間に差分があるかどうかに応じて)。
これにより、Git のコミットごとに SVN にリビジョンが作成されます。
オプションのGitブランチ名(またはGitコミットオブジェクト名)を指定した場合
引数を指定すると、サブコマンドは現在のブランチではなく、指定されたブランチで機能します。
活用 dコミット より好ましい セットツリー (以下)。
--リベースなし
コミット後は、リベースやリセットを行わないでください。
--コミットURL
この SVN URL (フルパス) にコミットします。 これは、既存の git SVN
XNUMX つのトランスポート方法 (例: svn:// または http://) で作成されたリポジトリ
匿名読み取り) は、後でユーザーに代替アクセス権が与えられた場合に再利用されます。
コミットのトランスポート方法 (例: svn+ssh:// または https://)。
設定キー: svn-remote。 .commiturl
設定キー: svn.commiturl (すべての svn-remote. .commiturl オプション)
commiturl 構成キーの SVN URL には SVN ブランチが含まれることに注意してください。 もし、あんたが
むしろ、SVN リポジトリ全体のコミット URL を設定したいと考えています。
svn-リモート。 代わりに .pushurl を使用してください。
このオプションを他の目的で使用することは (質問しないでください) 非常に強くお勧めできません。
--mergeinfo=
dcommit 中に指定されたマージ情報を追加します (例:
--mergeinfo="/branches/foo:1-10")。 すべての SVN サーバー バージョンでこれを保存できます
情報 (プロパティとして)、およびバージョン 1.5 以降の svn クライアントは
それの使用。 複数のブランチからのマージ情報を指定するには、単一のスペースを使用します
ブランチ間の文字 (--mergeinfo="/branches/foo:1-10
/枝/バー:3,5-6,8")
設定キー: svn.pushmergeinfo
このオプションを選択すると、git-svn は自動的に
可能な場合は、SVN リポジトリの svn:mergeinfo プロパティ。 現在、これは、
これは、非早送りマージをコミットするときにのみ行われます。
最初はすでに SVN にプッシュされています。
- 相互の作用
パッチ セットを実際に SVN に送信する必要があるかどうかをユーザーに確認してもらいます。 それぞれについて
パッチについては、「はい」(このパッチを受け入れる)、「いいえ」(このパッチを破棄)、「すべて」と答えることができます。
(すべてのパッチを受け入れる)、または「終了」します。
git SVN dコミット 答えが「いいえ」または「終了」の場合はすぐに戻ります。
SVN に何かをコミットします。
ブランチ
SVN リポジトリにブランチを作成します。
-m、--メッセージ
コミットメッセージを指定できます。
-t、--タグ
指定されたbranch_subdirの代わりにtags_subdirを使用してタグを作成します。
git svn init 中に。
-d 、 --destination=
複数の --branches (または --tags) オプションが指定された場合、 INIT or
コマンドを使用するには、作成するブランチ (またはタグ) の場所を指定する必要があります。
SVN リポジトリ内。 ブランチの作成に使用するパスを指定するか、
タグであり、構成されたいずれかの左側のパターンと一致する必要があります。
ブランチまたはタグのrefspec。 これらの refspec は次のコマンドで確認できます。
git config --get-all svn-remote。 .ブランチ
git config --get-all svn-remote。 .tags
どこ-R オプションで指定された SVN リポジトリの名前です。
INIT (またはデフォルトでは「svn」)。
-ユーザー名
コミットを実行する SVN ユーザー名を指定します。 このオプションは
ユーザ名 構成プロパティ。
--コミットURL
指定された URL を使用して、宛先 Subversion リポジトリに接続します。 これは
ソース SVN リポジトリが読み取り専用の場合に便利です。 このオプション
構成プロパティをオーバーライドします コミットURL.
git config --get-all svn-remote。 .commiturl
- 両親
親フォルダーを作成します。 このパラメータは、パラメータ --parents と同等です。
svn cp コマンドは、非標準のリポジトリ レイアウトに役立ちます。
タグ
SVN リポジトリにタグを作成します。 これはの略記です ブランチ -t.
ログ
これにより、svn ユーザーが svn ログ メッセージを参照するときに、svn ログ メッセージを簡単に検索できるようになります。
-r/--リビジョン番号。
「svn log」の次の機能がサポートされています。
-r [: ]、--リビジョン= [: 】
はサポートされていますが、数値以外の引数はサポートされていません: HEAD、NEXT、BASE、PREV など ...
-v、-verbose
svn ログの --verbose 出力と完全な互換性はありませんが、
かなり近い。
--制限=
--max-count と同じではありません。マージ/除外されたコミットはカウントされません
- 増分
。
新機能:
--show-commit
Git コミット sha1 も示しています
--オンライン
私たちのバージョンの --pretty=oneline
注意
SVN 自体は時刻を UTC でのみ保存し、それ以外は何も保存しません。 通常の SVN クライアント
UTC 時間をローカル時間 (または TZ= 環境に基づいて) に変換します。 これ
コマンドも同じ動作をします。
他の引数はすべてに直接渡されます。 git ログ
非難
ファイルの各行を最後に変更したリビジョンと作成者を表示します。 これの出力
このモードは、デフォルトで「svnblame」の出力とフォーマット互換性があります。 SVNのように
blame コマンドでは、作業ツリー内のローカルのコミットされていない変更は無視されます。 バージョン
HEAD リビジョン内のファイルのアノテーションが付けられます。 不明な引数が直接渡される
〜へ git 非難.
--git-format
以下と同じ形式で出力を生成します。 git 非難、ただし SVN リビジョン番号付き
Git コミット ハッシュの代わりに。 このモードでは、コミットされていない変更は
SVN (ローカル作業コピーの編集を含む) はリビジョン 0 として表示されます。
検索-rev
フォームの SVN リビジョン番号が与えられた場合 rN、対応する Git コミットを返します
ハッシュ (オプションで、この後にどのブランチを指定するかを指定するツリー風の文字を続けることができます)
検索しました)。 ツリーっぽいものを指定すると、対応する SVN リビジョン番号を返します。
-B、--前
SVN リビジョンが指定されている場合は完全に一致する必要はなく、代わりにコミットを見つけます。
(現在のブランチ上の) SVN リポジトリの状態に対応します。
指定されたリビジョン。
-A、--後
SVN リビジョンが指定されている場合は、完全に一致する必要はありません。 正確な情報がない場合
match は、履歴を前方に検索して最も近い一致を返します。
セットツリー
使用を検討する必要があります dコミット このコマンドの代わりに。 指定されたコミットをコミットする、または
ツリーオブジェクトをSVNに変換します。 これは、インポートされたフェッチ データが最新であるかどうかに依存します。 これ
SVN にコミットするときにパッチを適用しようとすることはまったくありません。
ツリーまたはコミットで指定されたファイルでファイルを上書きします。 すべてのマージは次のように想定されます
~とは独立して行われた git SVN 機能します。
作成-無視
ディレクトリ上の svn:ignore プロパティを再帰的に検索し、一致するプロパティを作成します
.gitignore ファイル。 結果のファイルはコミットされるようにステージングされていますが、コミットされていません。
関与する。 特定のリビジョンを参照するには、-r/--revision を使用します。
表示無視
ディレクトリ上の svn:ignore プロパティを再帰的に検索して一覧表示します。 出力は
$GIT_DIR/info/exclude ファイルに追加するのに適しています。
mkdirs
コア Git が情報に基づいて追跡できない空のディレクトリを再作成しようとします。
$GIT_DIR/svn/ 内/unhandled.log ファイル。 空のディレクトリは自動的に作成されます
「git svn clone」と「git svn rebase」を使用するときに再作成されるため、「mkdirs」は
「git checkout」や「git replace」などのコマンドの後に使用します。 (「
svn-リモート。 詳細については、.automkdirs 設定ファイル オプションを参照してください。)
コミット差分
コマンドラインから XNUMX つのツリー風の引数の差分をコミットします。 このコマンドは次のことを行います
git svn init-ed リポジトリ内にあることに依存しません。 このコマンドには XNUMX つ必要です
引数、(a) 比較する元のツリー、(b) 新しいツリーの結果、(c) URL
ターゲットの Subversion リポジトリの。 最後の引数 (URL) は省略できます。
から働いています git SVN-aware リポジトリ (で初期化されている) git SVN)。 ザ
-r これにはオプションが必要です。
info
「svn info」が提供するものと同様の、ファイルまたはディレクトリに関する情報を表示します。 する
現在、-r/--revision 引数はサポートされていません。 出力のみを行うには --url オプションを使用します
の値 URL: フィールド。
プロリスト
指定されたファイルまたは Subversion リポジトリに保存されているプロパティをリストします。
ディレクトリ。 特定の Subversion リビジョンを参照するには、-r/--revision を使用します。
小道具
ファイルの最初の引数として指定された Subversion プロパティを取得します。 特定の
リビジョンは -r/--revision で指定できます。
外部表示
Subversion の外観を示します。 特定のリビジョンを指定するには、-r/--revision を使用します。
gc
$GIT_DIR/svn/ を圧縮します/unhandled.log ファイルを削除してください
$GIT_DIR/svn/ /index ファイル。
リセット
の効果を元に戻します フェッチ 指定されたリビジョンに戻ります。 これにより、次のことが可能になります
再びフェッチ SVN リビジョン。 通常、SVN リビジョンの内容は変更されるべきではありません。
および リセット 必要ないはずだ。 ただし、SVN 権限が変更された場合、または変更された場合は、
--ignore-paths オプション、 フェッチ 「コミットに見つかりません」というエラーで失敗する可能性があります(ファイルがありません)
以前に表示されていた場合)または「チェックサムの不一致」(変更の欠落)。 問題が発生した場合
ファイルを永久に無視することはできません (--ignore-paths を使用)。リポジトリを修復する唯一の方法です。
使用することです リセット.
rev_map と refs/remotes/git-svn のみが変更されます (「 $GIT_DIR/svn/**/.rev_map.*
詳細については、以下の「ファイル」セクションを参照してください)。 従う リセット また、 フェッチ その後 git リセット
or git リベース ローカルのブランチを新しいツリーに移動します。
-r 、--リビジョン=
保持する最新のリビジョンを指定します。 それ以降のリビジョンはすべて破棄されます。
-p、--親
指定されたリビジョンも破棄し、代わりに最も近い親を保持します。
例:
「master」にローカルの変更があるが、「r2」を再フェッチする必要があるとします。
r1---r2---r3 リモート/git-svn
\
A---Bマスター
「r2」が不完全になる原因となった無視パスまたは SVN 権限の問題を修正しました。
そもそも。 それから:
git svn リセット -r2 -p
git svn フェッチ
r1---r2'--r3' リモート/git-svn
\
r2---r3---A---B マスター
次に、「マスター」を次のように修正します git リベース。 使ってはいけません git マージ そうしないと、あなたの履歴は役に立ちません
未来と両立できる dコミット!
git rebase --onto リモート/git-svn A^ マスター
r1---r2'--r3' リモート/git-svn
\
A'--B' マスター
OPTIONS
--shared[=(false|true|umask|group|all|world|everybody)]、--template=
でのみ使用されます INIT 指図。 これらは直接渡されます git INIT.
-r 、 -- リビジョン
と一緒に使用 フェッチ
これにより、部分的/焼灼された履歴のリビジョン範囲をサポートできるようになります。 $NUMBER、
$NUMBER1:$NUMBER2 (数値範囲)、$NUMBER:HEAD、および BASE:$NUMBER はすべてサポートされています。
これにより、フェッチの実行時に部分ミラーを作成できるようになります。 しかし一般的にはそうではありません
履歴がスキップされて失われるため、お勧めします。
-、--標準入力
でのみ使用されます セットツリー
標準入力からコミットのリストを読み取り、逆の順序でコミットします。 先頭だけ
sha1 は各行から読み取られるため、 git リビジョンリスト --pretty=ワンライン 出力を使用できます。
--rmdir
でのみ使用されます dコミット, セットツリー および コミット差分 コマンド。
ファイルが残っていない場合は、SVN ツリーからディレクトリを削除します。 SVNはできる
バージョンの空のディレクトリ。ファイルがない場合、デフォルトでは削除されません。
彼らの中に残った。 Git では空のディレクトリをバージョン管理できません。 このフラグを有効にすると、
SVN へのコミットは Git のように動作します。
設定キー: svn.rmdir
-e、--edit
でのみ使用されます dコミット, セットツリー および コミット差分 コマンド。
SVN にコミットする前にコミット メッセージを編集します。 これはオブジェクトに対してデフォルトでオフになっています
これはコミットであり、ツリー オブジェクトをコミットするときに強制的に適用されます。
設定キー: svn.edit
-l 、 --find-copies-harder
でのみ使用されます dコミット, セットツリー および コミット差分 コマンド。
どちらも直接渡されます git 差分ツリー; 湖 git-差分ツリー(1)詳細
情報を表示します。
設定キー: svn.l
設定キー: svn.findcopiesharder
-A 、 --authors-file=
構文は、で使用されるファイルと互換性があります。 git cvsimport:
ログイン名 = ジョー ユーザー[メール保護]>
このオプションが指定されている場合、 git SVN そうでない SVN コミッター名が見つかりました。
authors-ファイルに存在します。 git SVN 操作を中止します。 ユーザーは次のことを行う必要があります。
適切なエントリを追加します。 前回の再実行 git SVN コマンドの後に
authors-file が変更された場合は、操作を続行する必要があります。
設定キー: svn.authorsfile
--authors-prog=
このオプションを指定すると、SVN コミッター名ごとに、
authors ファイルの場合、指定されたファイルはコミッター名を先頭として実行されます。
口論。 プログラムは、「名前」という形式の XNUMX 行を返すことが期待されています。 "、
これは、作成者ファイルに含まれているかのように扱われます。
-q、-quiet
メーカー git SVN あまり冗長ではありません。 XNUMX 回目の時間を指定すると、さらに冗長になります。
-m、--merge、-s 、 --strategy= 、-p、--preserve-merges
これらは、 dコミット および リベース コマンド。
に直接渡されました git リベース 使用している場合 dコミット もし git リセット は使用できません(参照
dコミット).
-n、--ドライラン
これは、 dコミット, リベース, ブランチ および タグ コマンド。
dコミット、どの diff が表示されるかを示す一連の Git 引数を出力します。
SVN にコミットすること。
リベース、上流の svn リポジトリに関連付けられたローカル ブランチを表示します
現在のブランチとフェッチされる svn リポジトリの URL に関連付けられています
から。
ブランチ および タグ、作成時にコピーに使用される URL を表示します。
ブランチまたはタグ。
--使用ログ-作成者
svn コミットを Git に取得するとき ( フェッチ, リベースまたは dコミット
操作)、ログ メッセージの最初の From: 行または Signed-off-by: 行を探し、
それを作成者文字列として使用します。
--著者の追加元
Git から svn にコミットするとき (の一部として) コミット差分, セットツリー or dコミット
操作)、既存のログ メッセージに From: がまだ含まれていない場合、または
Signed-off-by: 行に、Git コミットの作成者文字列に基づいて From: 行を追加します。 もしも
これを使用すると、--use-log-author はすべての有効な作成者文字列を取得します。
コミットします。
高度な OPTIONS
-私、 --id
これにより、(環境を使用する代わりに) GIT_SVN_ID が設定されます。 これにより、ユーザーは次のことを行うことができます
単一の URL を追跡するときにフェッチするデフォルトの refname をオーバーライドします。 の ログ および
dコミット コマンドでは、このスイッチを引数として必要としなくなりました。
-R 、 --svn-remote
[svn-remote 」を指定します"] セクションを使用すると、複数の SVN が可能になります
追跡するリポジトリ。 デフォルト: 「svn」
--親に従う
このオプションは、(いずれかのリポジトリを使用して) ブランチを追跡している場合にのみ関連します。
レイアウト オプション --trunk、--tags、--branches、--stdlayout)。 追跡されたブランチごとに、次のことを試してください。
そのリビジョンのコピー元を見つけて、最初のリビジョンに適切な親を設定します。
ブランチの Git コミット。 これは、ディレクトリを追跡する場合に特に役立ちます
リポジトリ内で移動されたもの。 この機能が無効になっている場合、
によって作成されたブランチ git SVN すべてが線形であり、履歴を共有しません。つまり、
ブランチがどこで分岐または統合されたかについての情報はありません。 しかし、
長く複雑な履歴をたどるには長い時間がかかる可能性があるため、この機能を無効にします
クローン作成プロセスが高速化される可能性があります。 この機能はデフォルトで有効になっています。使用してください。
--no-follow-parent を使用して無効にします。
設定キー: svn.followparent
CONFIG ファイルのみ OPTIONS
svn.noMetadata、svn-remote。 .noメタデータ
これにより、 git-svn-id: すべてのコミットの最後にある行。
このオプションは、ワンショットインポートにのみ使用できます。 git SVN 取得できなくなります
再びメタデータなしで。 さらに、紛失した場合には、 $GIT_DIR/svn/**/.rev_map.*
ファイル、 git SVN 再構築することはできません。
AIマーケティング業界は、 git SVN ログ これを使用したリポジトリではコマンドも機能しません。 これを使うと
と衝突します useSvmProps (できれば)明白な理由によるオプションです。
このオプションは、古い参照を追跡するのが困難になるため、推奨されません。
既存のドキュメント、バグレポート、アーカイブの SVN リビジョン番号に変換します。 もし、あんたが
最終的には SVN から Git に移行する予定であり、SVN 履歴を削除することは確実です。
検討する git-filter-ブランチ代わりに(1)。 filter-branch では、次の再フォーマットも可能です
「svn.authorsFile」以外の著者情報の読み取りと書き換えを容易にするためのメタデータ
ユーザー。
svn.useSvmProps、svn-remote。 .useSvmProps
これにより、 git SVN を使用して作成されたミラーからリポジトリ URL と UUID を再マッピングします。
メタデータ用の SVN::Mirror (または svk)。
SVN リビジョンに「svm:headrev」プロパティがある場合、そのリビジョンは
SVN::Mirror によって作成されました (SVK によっても使用されます)。 プロパティにはリポジトリ UUID が含まれており、
改訂版。 元の URL をミラーリングしているように見せたいので、
元の ID URL と UUID を返すヘルパー関数を導入し、使用します
コミットメッセージでメタデータを生成するときに行われます。
svn.useSvnsyncProps、svn-remote。 .useSvnsyncprops
useSvmProps オプションと同様です。 これは、のユーザー向けです svnsync(1)コマンド
SVN 1.4.x 以降で配布されます。
svn-リモート。 .rewriteRoot
これにより、ユーザーは代替 URL からリポジトリを作成できるようになります。 たとえば、
管理者が実行できる git SVN ローカルのサーバー上 (file:// 経由でアクセス) ですが、希望します
メタデータ内のパブリック http:// または svn:// URL を使用してリポジトリを配布するには、
ユーザーには公開 URL が表示されます。
svn-リモート。 .rewriteUUID
useSvmProps オプションと同様です。 これは、UUID を再マッピングする必要があるユーザー向けです。
手動で。 これは、元の UUID が利用できない状況で役立つ場合があります。
useSvmProps または useSvnsyncProps を介して。
svn-リモート。 .pushurl
Git に似ている リモート。 .pushurl、このキーは次の場合に使用するように設計されています。
URL 代替トランスポートを提供するために、読み取り専用トランスポート経由で SVN リポジトリを指します。
読み取り/書き込みトランスポート。 両方のキーが同じリポジトリを指していると想定されます。
取消 コミットURL, プッシュURL はベースパスです。 どちらかの場合 コミットURL or プッシュURL かもしれない
中古、 コミットURL 優先されます。
svn.brokenSymlink回避策
これにより、チェックインされた壊れたシンボリックリンクを回避するための、コストがかかる可能性のあるチェックが無効になります。
壊れたクライアントによる SVN。 SVN リポジトリを追跡する場合は、このオプションを「false」に設定します。
シンボリックリンクではない多くの空の BLOB。 このオプションは、次の段階で変更される可能性があります。 git SVN is
実行され、フェッチされた次のリビジョンで有効になります。 未設定の場合、 git SVN これを想定します
オプションを「true」にします。
svn.パス名エンコーディング
これは、パス名を指定されたエンコーディングに再コーディングするように git svn に指示します。 使用できるのは、
Windows ユーザーおよび非 utf8 ロケールで作業するユーザーによるファイル名の破損を避けるため
非 ASCII 文字を使用します。 有効なエンコードは、Perl のエンコードでサポートされているものです。
モジュールを開きます。
svn-リモート。 .automkdirs
通常、「git svn clone」および「git svn rebase」コマンドは空のファイルを再作成しようとします。
Subversion リポジトリ内のディレクトリ。 このオプションが「false」に設定されている場合、
空のディレクトリは、「git svn mkdirs」コマンドが実行された場合にのみ作成されます。
明示的に。 未設定の場合、 git SVN は、このオプションが「true」であると想定します。
noMetadata、rewriteRoot、rewriteUUID、useSvnsyncProps、および useSvmProps オプションがあるため
すべては、によって生成および使用されるメタデータに影響します。 git SVN; 彼ら しなければなりません に設定する
履歴がインポートされる前に設定ファイルを作成し、これらの設定を変更しないでください。
設定すると変更されます。
さらに、svn-remote セクションごとにこれらのオプションのうち XNUMX つだけを使用できます。
影響を及ぼす git-svn-id: メタデータ行。ただし、rewriteRoot と rewriteUUID は除きます。
一緒に使用されます。
BASIC 例
Subversion が管理するプロジェクトのトランクを追跡し、それに貢献します (タグやタグを無視します)。
支店):
# リポジトリのクローンを作成します (git clone など):
git svn クローン http://svn.example.com/project/trunk
# 新しくクローンを作成したディレクトリを入力します。
CDトランク
# master ブランチ上にあるはずです。「git ブランチ」を再確認してください
gitブランチ
# いくつかの作業を行い、ローカルで Git にコミットします。
gitコミット...
# 何かが SVN にコミットされています。ローカルの変更を SVN に対してリベースします。
# SVN の最新の変更:
git svn リベース
# 次に、(Git を使用して以前にコミットされた) 変更を SVN にコミットします。
# 作業中の HEAD も自動的に更新されます:
git svn dcommit
# svn:ignore 設定をデフォルトの Git 除外ファイルに追加します。
git svn show-ignore >> .git/info/exclude
Subversion が管理するプロジェクト全体の追跡と貢献 (トランク、
タグとブランチ):
# 標準の SVN ディレクトリ レイアウト (git clone など) を使用してリポジトリのクローンを作成します。
git svn クローン http://svn.example.com/project --stdlayout --prefix svn/
# または、リポジトリが非標準のディレクトリ レイアウトを使用している場合:
git svn クローン http://svn.example.com/project -T tr -b ブランチ -t タグ --prefix svn/
# クローンしたすべてのブランチとタグを表示します:
gitブランチ-r
# SVN に新しいブランチを作成する
git svn ブランチ ウォルド
# マスターをトランク (または「トランク」を置き換える他のブランチ) にリセットします。
# 適切な名前を付けます):
git restart --hard svn/trunk
# 一度に XNUMX つのブランチ/タグ/トランクにのみ dcommit できます。 使い方
dcommit/rebase/show-ignore の # は上記と同じである必要があります。
初期 git SVN 非常に時間がかかる場合があります (特に大規模な Subversion の場合)
リポジトリ)。 複数人(または一人で複数台)で利用したい場合 git
SVN 同じ Subversion リポジトリと対話するには、最初の操作を行うことができます。 git SVN
サーバー上のリポジトリにコピーし、各人にそのリポジトリのクローンを作成してもらいます。 git :
# サーバー上で初期インポートを実行します
ssh サーバー「cd /pub && git svn clone」 http://svn.example.com/project [オプション...]"
# ローカルにクローンを作成します - refs/remotes/space がサーバーと一致することを確認してください
mkdirプロジェクト
CDプロジェクト
git init
git リモート追加オリジンサーバー:/pub/project
git config --replace-all remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
git フェッチ
# 今後、リモート Git サーバーからのフェッチ/プルを防止します。
# 今後の更新には git svn のみを使用したい
git config --remove-section リモート.オリジン
# 取得したばかりのブランチの XNUMX つからローカル ブランチを作成します
git checkout -b master FETCH_HEAD
# 'git svn' をローカルで初期化します (必ず同じ URL と
# サーバーで使用されていた --stdlayout/-T/-b/-t/--prefix オプション)
git svn 初期化 http://svn.example.com/project [オプション...]
# Subversion から最新の変更を取得します
git svn リベース
リベース VS。 プル/マージ
使用することを好む git SVN リベース or git リベースよりむしろ git プル or git マージ 〜へ
統合されていないコミットを git SVN ブランチ。 そうすることで履歴が残ります
統合されていないコミットは、上流の SVN リポジトリに関して線形であり、使用を許可します。
好ましいものの git SVN dコミット サブコマンドを使用して、統合されていないコミットを SVN にプッシュして戻します。
もともと、 git SVN 開発者は、からプルまたはマージすることを推奨しました。 git SVN ブランチ。
これは、作成者が git svn set-tree B を使用して単一のヘッドをコミットすることを好んだためです。
複数のコミットをコミットするための git svn set-tree A..B 表記。 の使用 git プル or git
マージ git svn set-tree A..B を使用すると、次の場合に非線形履歴が平坦化されます。
SVN にコミットすると、マージ コミットが以前のコミットを予期せず取り消してしまう可能性があります。
SVNでコミットします。
MERGE 追跡
一方、 git SVN リポジトリのコピー履歴(ブランチとタグを含む)を追跡できます
標準レイアウトを採用しているため、git 内で発生したマージ履歴を表すことはまだできません
SVN ユーザーに上流に戻ります。 したがって、ユーザーは履歴をできるだけ直線的に保持することをお勧めします。
SVN との互換性を容易にするために、Git 内で可能です (以下の「警告」セクションを参照)。
取り扱い OF SVN ブランチ
If git SVN ブランチをフェッチするように設定されている (および --follow-branch が有効である)、
XNUMX つの SVN ブランチに対して複数の Git ブランチを作成する場合があります。追加のブランチは
フォームの名前がある 支店名@nnn (nnn は SVN リビジョン番号です)。 これらの追加の
次の場合にブランチが作成されます git SVN SVN 内の最初のコミットの親コミットが見つかりません
ブランチ、ブランチを他のブランチの履歴に接続します。
通常、SVN ブランチの最初のコミットはコピー操作で構成されます。 git SVN 意志
このコミットを読んで、ブランチの作成元の SVN リビジョンを取得します。 次に、次のことを試みます
この SVN リビジョンに対応する Git コミットを見つけて、それを親として使用します。
ブランチ。 ただし、適切な Git コミットが存在しない可能性があります。
親。 これは、SVN ブランチがリビジョンのコピーである場合などに発生します。
それは取得されませんでした git SVN (例: スキップされた古いリビジョンであるため)
- リビジョン)、または SVN で追跡されないディレクトリがコピーされた場合 git SVN (など
まったく追跡されていないブランチ、または追跡されているブランチのサブディレクトリ)。 このような場合、
git SVN 引き続き Git ブランチを作成しますが、既存の Git コミットを
ブランチの親である場合、ブランチがコピーされたディレクトリの SVN 履歴を読み取ります。
から適切な Git コミットを作成します。 これは、「初期化中です」というメッセージによって示されます。
親: 」。
さらに、という名前の特別なブランチが作成されます。 @ここで、
ブランチのコピー元の SVN リビジョン番号です。 この支店は、
新しく作成されたブランチの親コミットを指します。 SVN でブランチが削除された場合
後で別のバージョンから再作成すると、そのようなブランチが複数存在します。
@.
これは、単一の SVN リビジョンに対して複数の Git コミットが作成されることを意味する場合があることに注意してください。
例: 標準のトランク/タグ/ブランチ レイアウトの SVN リポジトリでは、ディレクトリ
トランク/サブは r.100 で作成されます。 r.200 では、trunk/sub をbranch/ にコピーすることで分岐します。
git SVN -s 次にブランチを作成します 以下。 また、新しい Git コミットも作成されます。
r.100 ~ r.199 をブランチの履歴として使用します。 以下。 したがって、XNUMX つの Git が存在します。
r.100 から r.199 までの各リビジョンのコミット (trunk/ を含むもの、trunk/ を含むもの)
トランク/サブ/)。 最後にブランチを作成します サブ@200 の新しい親コミットを指します
ブランチ 以下 (つまり、r.200 と train/sub/ のコミット)。
警告
簡素化と Subversion との相互運用のために、すべての
git SVN ユーザーは SVN サーバーから直接クローン、フェッチ、dcommit を実行し、すべての作業を回避します。 git
/プル/マージ/プッシュ Git リポジトリとブランチ間の操作。 おすすめの
Git ブランチとユーザーの間でコードを交換する方法は、 git フォーマットパッチ および git am,
または、SVN リポジトリに「dcommit」するだけです。
Running: git マージ or git プル 計画しているブランチでは推奨されません dコミット from
Subversion ユーザーはあなたが行ったマージを見ることができないからです。 さらに、合併したり、
SVN ブランチのミラーである Git ブランチからプルします。 dコミット 間違ったことを犯すかもしれない
ブランチ。
マージする場合は、次のルールに注意してください。 git SVN dコミット 上にコミットしようとします
で指定された SVN コミット
git log --grep=^git-svn-id: --first-parent -1
我が国 しなければなりません したがって、dcommit するブランチの最新のコミットを確認してください。
は 最初の マージの親。 そうしないと、特に最初の場合は混乱が続きます。
親は同じ SVN ブランチ上の古いコミットです。
git refs/remotes/ 階層またはその他の下にブランチを複製しません。 git SVN
メタデータ、または構成。 したがって、リポジトリは次を使用して作成および管理されます git SVN 使用する必要があります
rsync クローン作成用 (クローン作成を行う場合)。
Since dコミット 内部でリベースを使用し、Git ブランチを使用します。 git プッシュ 前に dコミット on
リモート リポジトリ上の既存の参照を強制的に上書きする必要があります。 これは
一般に悪い習慣と考えられています。を参照してください。 git-プッシュ(1) 詳細についてはドキュメントを参照してください。
の --amend オプションは使用しないでください。 git-commit(1) すでにコミットした変更について。 それ
すでにリモート リポジトリにプッシュしたコミットを --amend するのは悪い習慣であると考えられています
他のユーザーの場合、SVN を使用した dcommit はそれに似ています。
SVN リポジトリのクローンを作成するときに、リポジトリを記述するためのオプションが何もない場合
レイアウトが使用されます (--trunk、--tags、--branches、--stdlayout)。 git SVN Gitを作成します
ブランチとタグが別々に表示される、完全に直線的な履歴を持つリポジトリ
作業コピー内のディレクトリ。 これは完全なコピーを入手する最も簡単な方法ですが、
リポジトリ、多くのブランチを持つプロジェクトの場合、作業コピーが何度も作成されることになります
トランクだけより大きい。 したがって、標準のディレクトリ構造を使用するプロジェクトの場合、
(トランク/ブランチ/タグ)、オプションを使用してクローンを作成することをお勧めします --stdlayout。 プロジェクトの場合
非標準の構造を使用するか、ブランチやタグが必要ない場合は、これが最も簡単です
リポジトリのレイアウトを指定せずに、XNUMX つのディレクトリ (通常はトランク) のみのクローンを作成します。
オプション。 ブランチとタグを含む完全な履歴が必要な場合は、オプション - トランク /
-ブランチ / -タグ 使用する必要があります。
複数の --branch または --tag を使用する場合、 git SVN 名前を自動的に処理しません
衝突 (たとえば、異なるパスからの XNUMX つのブランチが同じ名前を持つ場合、または
ブランチとタグは同じ名前です)。 このような場合には、 INIT Git をセットアップするには
最初のリポジトリの前に フェッチ、 $GIT_DIR/config ファイルを編集して、
ブランチとタグは異なる名前空間に関連付けられます。 例えば:
ブランチ = 安定/*:refs/リモート/svn/安定/*
ブランチ = デバッグ/*:refs/remotes/svn/debug/*
onworks.net サービスを使用してオンラインで git-svn を使用する