在我的 Win7 Pro 64 位机器上,我有 TortoiseGit 和带有 git 的 cygwin。如果我尝试查找待处理的更改,我会从 cygwin 和 TortoiseGit 获得不同的结果。我确信 cygwin git 的结果是错误的。
为什么 cygwin 上的 git 会报告所有这些文件已更改,即使我没有碰过它们?
TortoiseGit 的输出(正确):
cygwin git 的输出(错误):
$git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: .classpath
# modified: .gitignore
# modified: belipro.xml
# modified: etc/buildnum.properties
# modified: etc/db/adjust.sql
# modified: etc/db/update11.sql
# modified: etc/db/update12.sql
# modified: etc/excel-template/Anlagen.xls
# modified: etc/projektierbareTemplaes/templateA.rtf
# modified: etc/test/belipro.sql.zip
# modified: lib/commons-lang-2.6.jar
# modified: lib/jacob-1.14.3-x86.dll
# modified: lib/jacob.jar
# modified: res/ch/pp/belimed/bo/planung/ArbeitsStundenResourcePack.java
# modified: res/ch/pp/belimed/bo/planung/AufgabeAuftragResourcePack.java
# modified: res/ch/pp/belimed/bo/planung/AufgabeResourcePack.java
# modified: res/ch/pp/belimed/bo/planung/arbeitsstunden 32x32.png
# modified: res/ch/pp/belimed/bo/planung/arbeitsstunden 64x64.png
# modified: res/ch/pp/belimed/bo/planung/aufgabe 32x32.png
# modified: res/ch/pp/belimed/bo/planung/aufgabe 64x64.png
# modified: res/ch/pp/belimed/bo/planung/aufgabeauftrag 32x32.png
# modified: res/ch/pp/belimed/bo/planung/aufgabeauftrag 64x64.png
# modified: res/ch/pp/belimed/bo/projekt/DruckbehaelterResourcePack.java
# modified: res/ch/pp/belimed/bo/projekt/EldResourcePack.java
# modified: res/ch/pp/belimed/bo/projekt/WtdResourcePack.java
# modified: res/ch/pp/belimed/bo/projekt/druckbehaelter 32x32.png
# modified: res/ch/pp/belimed/bo/projekt/druckbehaelter 64x64.png
# modified: res/ch/pp/belimed/bo/projekt/eld 32x32.png
# modified: res/ch/pp/belimed/bo/projekt/eld 64x64.png
# modified: res/ch/pp/belimed/bo/projekt/projektierbar 32x32.png
# modified: res/ch/pp/belimed/bo/projekt/projektierbar 64x64.png
# modified: res/ch/pp/belimed/bo/projekt/wtd 32x32.png
# modified: res/ch/pp/belimed/bo/projekt/wtd 64x64.png
# modified: res/ch/pp/belimed/bo/util/BatchResourcePack.java
# modified: res/ch/pp/belimed/bo/util/TypResourcePack.java
# modified: res/ch/pp/belimed/explorer/BeliproExplorerComponentFactoryResourcePack.java
# modified: res/logging.properties
# modified: src/ch/pp/belimed/bo/planung/Aufgabe.java
# modified: src/ch/pp/belimed/bo/planung/AufgabeAuftrag.java
# modified: src/ch/pp/belimed/bo/planung/Auftrag.java
# modified: src/ch/pp/belimed/bo/planung/InternerAuftrag.java
# modified: src/ch/pp/belimed/bo/planung/Meilenstein.java
# modified: src/ch/pp/belimed/bo/planung/MeilensteinTyp.java
# modified: src/ch/pp/belimed/bo/planung/MitarbeiterAuftrag.java
# modified: src/ch/pp/belimed/bo/planung/Planung.java
# modified: src/ch/pp/belimed/bo/planung/Sammelauftrag.java
# modified: src/ch/pp/belimed/bo/projekt/ProjektStatus.java
# modified: src/ch/pp/belimed/bo/util/Batch.java
# modified: src/ch/pp/belimed/bo/util/Bezeichnung.java
# modified: src/ch/pp/belimed/explorer/BeliproExplorerComponentFactory.java
# modified: src/ch/pp/belimed/ui/planung/AufgabeSearchPanel.java
# modified: src/ch/pp/belimed/ui/planung/InternerAuftragDetailPanel.java
# modified: src/ch/pp/belimed/ui/planung/MitarbeiterAuftragDetailPanel.java
# modified: src/ch/pp/belimed/ui/planung/MitarbeiterDetailPanel.java
# modified: src/ch/pp/belimed/ui/projekt/AnlageSearchPanel.java
# modified: src/ch/pp/belimed/ui/projekt/KundeSearchPanel.java
# modified: src/ch/pp/belimed/ui/projekt/PlanungAssigner.java
# modified: src/ch/pp/belimed/ui/util/BatchDetailPanel.java
# modified: src/ch/pp/belimed/util/DbVersion.java
# modified: src/ch/pp/belimed/util/ReleaseInfo.java
# modified: src/ch/pp/util/DateUtils.java
# modified: test/ch/pp/belimed/bo/planung/AufgabeTest.java
#
no changes added to commit (use "git add" and/or "git commit -a")
答案1
我怀疑是行尾。如果 Tortoise git 像其他原生 Windows 版本控制客户端一样工作,它会自动将回车符添加到签出的文件,并且知道在与存储库中的文件进行比较时再次删除它们。Cygwin git 是一个优秀的 Unix 公民,不会做任何这样的事情,因此它将 Tortoise 添加的那些回车符视为修改。
这个故事的寓意是:对于任何特定的签出,请坚持使用 Tortoise git 或 Cygwin git,否则您最终会得到糟糕的行尾混合。不要混合客户端的另一个原因是它们在 .git 目录中存储内容的方式可能有所不同。
(同样的建议也适用于其他版本控制系统。)
答案2
我最初以为是空格,但你那里也有一些 .png。
可能是文件模式改变了。尝试一下;
git config core.filemode false
如果这不起作用并且唯一的区别是更改时间戳,您可以尝试;
git config core.trustctime false
(当然,您可以通过重复该命令将 false 改为 true 来撤消上述任一操作)
答案3
TortoiseGit < 1.8.13.0 不支持 Cygwin Git。您需要一个较新版本。
1)选择[CYGWIN-INSTALL-PATH] \bin-folder 作为git.exe文件夹。
2) 在 Windows 中配置 HOME 环境变量,以便 Cygwin 和 TortoiseGit 使用相同的主目录和全局 git-config。此处使用正常的 Windows 表示法(例如,“C:\Users\USERNAME”)。默认情况下,TortoiseGit 使用 Windows 主目录(通常位于 c:\Users 下),而 Cygwin 使用其自己的主目录(位于 [CYGWIN-INSTALL-PATH]\home 下)。
3) 配置 AutoCrLf,这是必需的,因为 TortoiseGit 和 Cygwin Git 具有不同的默认值。Cygwin Git 中的默认值为 true。
4) 转到 TortoiseGit 的“高级设置”部分,并将 CygwinHack 设置为 true,以激活 cygwin 解决方法。
5)重新启动。
基于https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html和https://tortoisegit.org/issue/56