Состояние git cygwin и коммит git черепахи показывают различные изменения

3063
BetaRide

На моей 64-битной машине Win7 Pro у меня есть TortoiseGit и cygwin с git. Если я пытаюсь найти ожидающие изменения, я получаю разные результаты от Cygwin и TortoiseGit. Я уверен, что результат Cygwin Git не так.

Почему git на cygwin сообщает, что все эти файлы изменились, даже если я их не трогал?

Вывод TortoiseGit (правильный): TortoiseGit Output

Вывод 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") 
2

3 ответа на вопрос

4
RJFalconer

Сначала я думал, что пробел, но у вас там тоже есть .pngs.

Возможно, это изменение режима файла. Пытаться;

git config core.filemode false 

Если это не сработает, и если единственная разница - это отметка времени изменения, вы можете попробовать;

git config core.trustctime false 

(Конечно, вы можете отменить любой из них, повторив команду, изменив false на true)

Установка core.filemode в false работала для меня. У меня были проблемы с cygwin, неправильно сообщавшим о модифицированных файлах, которые клонировал сам cygwin, fwiw. crewbum 13 лет назад 2
3
ak2

Я бы заподозрил окончание строк. Если Tortoise git работает как другие нативные клиенты контроля версий Windows, он автоматически добавляет возврат каретки к извлеченным файлам и знает, что нужно удалить их снова при сравнении с файлами в хранилище. Cygwin git, будучи хорошим гражданином Unix, не делает ничего подобного, поэтому он видит те возвраты каретки, которые Черепаха добавила как модификации.

Мораль истории: для любой конкретной проверки придерживайтесь либо черепахового мерзавца, либо мерзавца мерзавца, иначе у вас получится ужасное сочетание концовок строк. Другая причина не смешивать клиентов заключается в том, что они могут иметь различия в том, как они хранят вещи в каталоге .git.

(Практически тот же совет относится и к другим системам контроля версий.)

Я уверен, что это не проблема. Если это так, то все файлы будут помечены как измененные. Но это только небольшое подмножество ~ 2000 файлов. BetaRide 13 лет назад 0
Справедливо, но было бы полезно упомянуть этот факт в вопросе. Это все еще оставляет возможность несовместимости в формате .git. Какие различия на самом деле думает Cygwin git, то есть как выглядит вывод `git diff`? ak2 13 лет назад 0
@BetaRide, в зависимости от того, с какими окончаниями строк был зарегистрирован этот набор файлов, и локальной настройкой autocrlf, все еще может быть возможно, чтобы ошибочные изменения пробелов отображались, как предполагает ak2. Однако, поскольку у вас есть двоичные файлы в этом миксе, это, вероятно, не проблема. RJFalconer 13 лет назад 0
Это устарело, см. Http://superuser.com/a/975576/353744 MrTux 9 лет назад 0
1
MrTux

TortoiseGit <1.8.13.0 не поддерживает Cygwin Git. Вам нужна более новая версия .

1) Выберите папку [CYGWIN-INSTALL-PATH] \ bin-folder в качестве папки git.exe.

2) Настройте переменную среды HOME в Windows, чтобы Cygwin и TortoiseGit использовали один и тот же домашний каталог и глобальный git-config. Используйте обычную запись Windows (например, «C: \ Users \ USERNAME»). По умолчанию TortoiseGit использует домашний каталог Windows, который обычно находится в каталоге c: \ Users, а Cygwin использует свои собственные домашние каталоги, которые находятся в каталоге [CYGWIN-INSTALL-PATH] \ home.

3) Настройте AutoCrLf, это необходимо, так как TortoiseGit и Cygwin Git имеют разные значения по умолчанию. По умолчанию в Cygwin Git это правда.

4) Перейдите в TortoiseGit, раздел «Расширенные настройки» и установите CygwinHack в true, чтобы активировать обходные пути cygwin.

5) перезагрузка.

Основано на https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html и https://tortoisegit.org/issue/56.

Шаг № 4 имеет решающее значение, вот что решило проблему для меня (возможно, потому что я уже сделал другие шаги, так как я запомнил это) Gene Pavlovsky 8 лет назад 0

Похожие вопросы