git 如何跟踪更改?为什么它会感到困惑?因为我确实

git 如何跟踪更改?为什么它会感到困惑?因为我确实

我在 Dropbox 文件夹中有一个 git 存储库,在 Linux 计算机和 Windows 计算机之间共享。我尝试仅在 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

答案1

虽然将 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在另一个存储库中使用。

答案2

您正在从 git status 输出中截取一些可能很重要的信息。git status 是否显示“未暂存更改以供提交”或“待提交更改”。如果显示后者,则文件始终显示为已修改的原因是因为您在索引中有未提交的更改。

相关内容