SourceTree App即使对于新克隆的存储库也说未提交的更改 - 可能是错的?

Vil*_*ila 40 git end-of-line atlassian-sourcetree

远程git仓库只是克隆使用本地箱Atlassian的SourceTree.即使工作树中没有真正修改过任何文件,Atlassian也会立即在"未提交的更改"下列出一堆文件.每个文件显示删除和添加的相同行数,此计数等于文件中行的总数.这会以某种方式暗示我们正在遇到某种线路结束问题.

但是,存储库.gitattribute包含

# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto
Run Code Online (Sandbox Code Playgroud)

根据GitHub文章处理行结尾应该明确地core.autocrlf为存储库确定.但也~/.gitconfig包含autocrlf = true.

如果尝试将修改后的文件"恢复"回到先前的提交,则无效.相同的文件仍被视为未提交.

已将存储库克隆到多个位置,并确保没有文件位于同一路径中,以确保SourceTree或git不记得旧文件.

该存储库与Windows,Linux和OSX盒子协作.此问题仅出现在OSX中.

SourceTree/repository/git设置中可能还有什么问题?


更新#1,20.2013年4月

由于还有一些问题,这里有部分输出git config --list.

来自SourceTree控制台(OSX)

core.excludesfile=/Users/User/.gitignore_global
core.autocrlf=input
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.autocrlf=true
Run Code Online (Sandbox Code Playgroud)

以下是Windows端的相应输出:

core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
http.proxy=
core.autocrlf=true
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
core.eol=native
core.autocrlf=true
Run Code Online (Sandbox Code Playgroud)

并且.gitattributes对于有问题的存储库是完整的

# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto

*.php    text
*.twig   text
*.js     text
*.html   text diff=html
*.css    text
*.xml    text
*.txt    text
*.sh     text eol=lf
console  text

*.png    binary
*.jpg    binary
*.gif    binary
*.ico    binary
*.xslx   binary
Run Code Online (Sandbox Code Playgroud)

Kez*_*zer 38

我是SourceTree的开发人员之一(实际上我开发了该产品的Mac版本),所以希望我可以提供一些帮助.

Windows机器在提交时将CRLF转换为LF,在签出时将LF转换为CRLF.autocrlf确保存储库中的所有内容都是LF.该选项text = auto是我们感兴趣的选项,但正如文档中所述:

当文本设置为"auto"时,路径将标记为自动行结束标准化.如果git决定内容是文本,则其行结尾在签入时标准化为LF.

因此,您在签到时会看到它会说"嘿,我需要规范化这些行结尾,因为它们不是LF格式,而是CRLF格式." 并因此修改您的工作副本以完成预期的工作.通常在Mac/Linux上你不需要规范化,因为一切都在LF中,但是Git会检查,因为你可能已经从以前在Windows上开发的存储库中检出过,或者可能在使用CRLF的编辑器中检出而不是LF.

简而言之,您可能希望重新提交所有这些文件,因为它们应该是LF格式,但也要确保autocrlf = true(在Windows文件夹中编辑,始终为true!),如文档中所述:

如果您只想在工作目录中使用CRLF行结尾而不管您正在使用的存储库,则可以设置配置变量"core.autocrlf"而不更改任何属性.

虽然想象之前的引用是在设置autocrlf特定存储库以及全局时.

希望有一些帮助,如果没有,请随时提出更多问题!


这是一个很好的SO帖子:行结尾:为什么我应该在Git中使用core.autocrlf = true?


编辑

基于上述答案,我们需要确定一些事情.

  • 你已经在你的设置中设置了相关的git选项 .git/config
  • 如果你想保留CRLF行结尾然后设置 autocrlf=true
  • 如果在检出存储库时,您不希望自动转换行结尾(导致所有文件立即处于"已修改"状态),则将text选项设置为unset.如果全局git配置将其设置为您不想要的值,请添加此选项.
  • 如果您正在为Windows和Mac工作一个项目,那么您最好拥有text=auto并确保LF全面使用.这就是为什么像这样的问题蔓延; 因为你的git配置有所不同,或者因为Windows上的初始项目/ git设置假定你的Mac假设LF时CRLF.

  • 我的问题是`.gitattributes`有`*text = auto`.删除修复了该问题.如果您选择完全删除文件,请确保暂存更改,否则您将无法查看是否已修复该问题. (3认同)

Ada*_*ger 11

我仍然不理解它100%,但对我们来说问题是存储库* text=auto中的.gitattribute文件.我查了一下,我们肯定已经core.autocrlf=true设置好了可以在Windows PC上为我的用户设置的每个地方.我知道它也不是SourceTree问题,因为TortoiseGit和Windows Git(msysgit)都对此存储库有相同的"问题".真奇怪的行为 - 我会克隆回购一次并立即看到11个"不同"的文件,然后我会删除并重新开始,下一个克隆将有14个"不同"的文件.

在存储库* text=auto.gitattribute文件中注释掉了所有内容.它几乎就像text=auto不一样,autocrlf=true如果第一个在.gitattribute文件中设置,则后者被禁用.但这并不是每个在线指南似乎都表明的.