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/configautocrlf=truetext选项设置为unset.如果全局git配置将其设置为您不想要的值,请添加此选项.text=auto并确保LF全面使用.这就是为什么像这样的问题蔓延; 因为你的git配置有所不同,或者因为Windows上的初始项目/ git设置假定你的Mac假设LF时CRLF.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文件中设置,则后者被禁用.但这并不是每个在线指南似乎都表明的.