私もこれに興味があります。あなたがGitのSVNのクローンを使用して作成されたレポを持っていると仮定すると、私はあなたは、3つの異なる質問にそれを打破することができると思う:
- 任意のGitの改行の正規化/変更は、SVNからのコミットを移動するには、時間をフェッチのgitのsvnで起こるんgit repoに?
- git改行時にgit改行正規化/改変が起こるのはなぜですか?通常のローカルgitのコミット中にsvnリモートでレポにコミットしますか?マージ/リベース時間はどうですか?
- git newlineの正規化/改変はgit svn dcommit時に、svnに対してコミットするgitを押す/再生する際に起こりますか?
私は理論的にはこれらの質問に当てはまることになっているものを聞いてみたい、今の私は、少なくともケース#1には改行の正規化がないことを示しているようだ少し実験しました:
を
rem We'll make a svn repo with CRLF newlines, clone it into git with
rem autocrlf enabled, and try to see if that results in LF-only newlines
rem getting stored in the git repo
cd c:\code
rem Step 1. Prepare SVN repo with CRLF type newlines.
rem The pre-1.4 flag is to prevent an error during git clone.
svnadmin create --pre-1.4-compatible svnrepo
svn checkout file:///C:/code/svnrepo svnworking
cd svnworking
echo "First line" > file.txt
echo "Second line" >> file.txt
echo "Third line" >> file.txt
rem NOTE: At this point file.txt has CRLF newlines
svn add file.txt
svn commit -m "Add file.txt"
rem NOTE: At this point file.txt still has CRLF newlines
cd ..
rem Step 2. Clone the svn repo into git and inspect work copy newline type
git svn clone file:///C:/code/svnrepo gitrepo
rem The following outputs true on my machine
git config --get core.autocrlf
cd gitrepo
rem The following also outputs true on my machine
git config --get core.autocrlf
git svn fetch
rem NOTE: At this point file.txt (git working dir copy) has CRLF newlines
rem Step 3. Disable autocrlf to inspect repo's inner newline type
rem Use the following and my editor to set core.autocrlf to false:
git config --edit --local
rem This now prints false:
git config --get core.autocrlf
git checkout .
rem NOTE: At this point file.txt (git working dir copy) still has CRLF newlines
del file.txt
git checkout .
rem NOTE: Even after explicitly deleting the old one and checking out again,
rem file.txt still has CRLF newlines
私のgit svn pull中にgit newline変換が行われたのであれば、これとは対照的に、file.txtはLFのみの改行をすべての最後に持たせると思います。要約すると
rem We'll a git repo with core.autocrlf on, then switch it off to
rem pull out a file
rem The following outputs true
git config --get core.autocrlf
git init gitcrtest
cd gitcrtest
rem The following still outputs true
git config --get core.autocrlf
echo "First line" > file.txt
echo "Second line" >> file.txt
echo "Third line" >> file.txt
git add file.txt
git commit -m "Add file.txt"
rem NOTE: At this point file.txt (git working dir copy) has CRLF newlines
rem Use the following to set core.autocrlf to false
git config --edit --local
git checkout .
rem NOTE: Now file.txt (git working dir copy) has LF-only newlines
:ここ
が実際レポはLF-改行だけを持っているかどうかの有効なテストを実装し、上記3ステップの健全性チェックです以上のことから、のgit - SVNを引いたときと思われますsvnからsvnコミットは、autocrlfが有効な場合でも、crlf変換なしでgit commitグラフに追加されます。つまり、あなたのファイルがあなたのsvnリポジトリにあるどんなタイプの改行であれ、あなたのgitクローンにも入れます。 (でも、あなたのgit
作業コピーは、改行タイプが異なるかもしれません)。
これは、 "git help attributes"の行末正規化についての議論とよく似ています。正規化は、リポジトリから作業ディレクトリ(例えば、チェックアウトやマージ)に作業を引き出すコマンドや作業ディレクトリからインデックス/リポジトリ(例:追加やコミット)に移動するコマンドのいずれかで行われます。 「Git svn fetch」はこれらのことのいずれかを行うようには見えないので、その時点で行末の正規化は行われません。私はdcommitが何をしているのかがはっきりしていないので、その時点での行末の正規化を期待するかどうかはわかりません。
あなたのレポ/マシンにSVNのsvn:eol-styleプロパティが設定されている場合は、さらに皺があります。私と思う SVNのデフォルトはではない私は100%確信していません。
更新:実際のsvn-> gitマイグレーションパースペクティブについては、Tim Abell's descriptionも参照してください。 gitの自動行末正規化がオンのままであれば、CRLF改行はgit-svnによってLF専用改行に変換されず、理想的でない結果が返されます。解決策は、gitの行末を正規化するか、行末の正規化を無効にすることでした。
"私は、SVNのデフォルトは、最後に行末変換をしないことだと思う"そう、http://svnbook.red-bean.com/en/1.7/svn.advanced.propsによるとそうだ。 file-portability.html "デフォルトでは、Subversionはあなたのファイルで使用されているEOL(End-of-Line)マーカーの種類には何の注意も払っていません。 –