web-dev-qa-db-ja.com

gitはどのように変更を追跡しますか、なぜ混乱するのですか?やってるから

LinuxマシンとWindowsマシンの間で共有されているDropboxフォルダーにgitリポジトリがあります。発生する可能性のある「問題」を認識しているため、Windowsマシンでのみ同期しようとしています。ただし、変更を追跡するために、Linuxボックスで小さなコミットを行うことがあります。

しかし今、私は本当に興味があります。gitが何をしているのか:Idはファイルに触れませんでしたfonttest.tex、しかしgitはそれが変更されたと私に報告します:

towi@havaloc:~/Dropbox/latex$ git status fonttest.tex
# On branch master
...
#   modified:   fonttest.tex

そして、diffはファイル全体をリストします:すべての行が削除され、再度挿入されます。わかりました、おそらくCRLFの問題です。そこで、todosfromdosに、CRとCRLFの有無にかかわらず前後に変換するように依頼します。しかし-あなたはすでに推測します-gitの変更はありません:すべての行が変更されました。

うーん、私は思った、私は知っている何も変わっていないので、私はきれいなコピーを得る

mv fonttest.tex fonttest.tex1
git checkout fonttest.tex

そして、私は好奇心旺盛な人なので、違いを見たいと思います。

diff fonttest.tex fonttest.tex1

何も。本当に?

towi@havaloc:~/Dropbox/latex$ md5sum fonttest.tex*
d3544bd060504ebb682b2e446375b3b3  fonttest.tex
d3544bd060504ebb682b2e446375b3b3  fonttest.tex1

本当に。 そしてgitはそれについて何を考えていますか

towi@havaloc:~/Dropbox/latex$ git status fonttest.tex
# On branch master
...
#   modified:   fonttest.tex

男、あなたは私のためにそれをチェックしただけです! ここで問題は何ですか?なぜgitはファイルが変更されたと考えているのですか?

これが私の設定の抜粋です。 Dropbox共有に関する誰かのヒントに従って、CRLFに関していくつかの調整を行いました。しかし...私はここでgitをフォローすることはできません。

towi@havaloc:~/Dropbox/latex$ git config -l       
diff.renames=copies
apply.ignorewhitespace=change
apply.whitespace=nowarn
core.whitespace=cr-at-eol
core.repositoryformatversion=0
core.filemode=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.eol=lf
core.autocrlf=input
4
towi

GitリポジトリをDropboxフォルダ内に保持することはおそらく問題ありませんが、問題は、複数のシステムが作業ディレクトリインデックスを共有することです。 Gitは、この種の使用法のために実際に設計されたわけではありません。

私の推測では、あなたが直面している問題はこれと関係があると思います。 Windowsマシンは\r\nを使用しますが、Linuxマシンは\nを使用するため、おそらくこれは行末の問題です。

Dropboxを使用してGitリポジトリの同期を維持したい場合は、Dropboxにベアリポジトリを保持してから、別のリポジトリからプルしてプッシュすることをお勧めします。このように、ベアリポジトリはDropboxを介して同期されますが、各オペレーティングシステムは独自の作業ディレクトリとインデックスを個別に保持します。

Linuxマシンでこれを行います。

mv ~/Dropbox/latex ~/
cd ~/latex
git init --bare ~/Dropbox/latex.git
git remote add dropbox ~/Dropbox/latex.git
git Push dropbox master

次に、Windowsマシンでこれを行います。

cd %USERPROFILE%
git clone Dropbox\latex.git
cd latex
git remote rename Origin dropbox

この時点から、すべての作業は~/latex(Linux)および%USERPROFILE%\latex(Windows)内で行います。共有したいコミットを行うときは、一方のリポジトリでgit Push dropbox masterを使用し、もう一方のリポジトリでgit pull dropbox masterを使用します。

1

Gitstatus出力からいくつかの潜在的に重要な情報を切り取っています。 gitステータスは「変更はコミット用にステージングされていません」または「変更はコミットされます」と表示されますか?後者の場合、ファイルが常に変更済みとして表示されるのは、インデックスにコミットされていない変更があるためです。

0
Ciclamino