jjzjj

git - SourceTree App 说即使对于新克隆的存储库也有未提交的更改 - 可能有什么问题?

coder 2023-06-23 原文

使用 Atlassian SourceTree 将远程 git 存储库克隆到本地框.即使工作树中没有文件真正被修改,Atlassian 也会立即在“未提交的更改”下列出一堆文件。每个文件在删除和添加时都显示相同的行数,并且此计数等于文件中的总行数。这会以某种方式暗示我们正在遇到某种行结束问题。

但是,存储库的 .gitattribute 包含

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

根据 GitHub 文章 Dealing with Line Endings应该明确地为存储库设置 core.autocrlf true。然而 ~/.gitconfig 也包含 autocrlf = true

如果尝试将修改后的文件“还原”回之前的提交,则没有任何效果。相同的文件仍被视为未提交。

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

存储库与 Windows、Linux 和 OSX box 协作。此问题仅出现在 OSX 中。

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


更新 #1,2013 年 4 月 20 日

由于还有问题,这里是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

这是 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

以及相关存储库的完整 .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

最佳答案

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

Windows 机器在提交时将 CRLF 转换为 LF,在 checkout 时将 LF 转换为 CRLF。 autocrlf 确保存储库中的所有内容都是 LF。 text = auto 选项是我们感兴趣的选项,因为它 says in the docs :

When text is set to "auto", the path is marked for automatic end-of-line normalization. If git decides that the content is text, its line endings are normalized to LF on checkin.

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

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

If you simply want to have CRLF line endings in your working directory regardless of the repository you are working with, you can set the config variable "core.autocrlf" without changing any attributes.

尽管想象一下之前的引用是在为特定存储库以及全局设置 autocrlf 时。

希望这对您有所帮助,如果没有,请随时提出更多问题!


这是一个很好的 SO 帖子 re: line endings: Why should I use core.autocrlf=true in Git?


编辑

根据上面的回答,我们需要确定一些事情。

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

关于git - SourceTree App 说即使对于新克隆的存储库也有未提交的更改 - 可能有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958446/

有关git - SourceTree App 说即使对于新克隆的存储库也有未提交的更改 - 可能有什么问题?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  7. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

随机推荐