Git diff сообщает о локальных изменениях «старый режим» / «новый режим» - PullRequest
6 голосов
/ 24 марта 2011

Есть 2 машины, A и B. И есть 2 ветви, p16 и c2.

A имеет файловую систему ext3, но на B архив живет на диске truecrypt с vfat, mount показывает rw, uid = 1000, gid = 1000, umask = 077

A связал дерево каталогов B со своим деревом каталогов, используя sshfs, а затем A вставил в p16 B, используя файловую систему.

Теперьесть некоторые проблемы с правами доступа:

B$ git status
# On branch p16
nothing to commit (working directory clean)
B$ git checkout c2
Switched to branch 'c2'
B$ git checkout p16
error: You have local changes to 'help.txt'; cannot switch branches.

git diff показывает мне измененный режим для всех файлов:

B$git diff
diff --git a/help.txtt b/help.txt
old mode 100644
new mode 100755
diff --git a/169.txt b/169.txt
old mode 100644
new mode 100755
... 
(a list with all files having their mode changed follows)
...

Я думаю, проблема в том, что локальная файловая система является контейнером vfat truecryptи файловая система не разрешает разрешения, которые ожидает другая машина.

Есть идеи, как лучше связать 2 машины с разными файловыми системами?

1 Ответ

8 голосов
/ 25 марта 2011

Такие проблемы при использовании git могут возникать, если права доступа к файлам операционной системы не работают должным образом в этом месте.Например, когда монтируются сторонние файловые системы.

Мегар указал на решение в своем комментарии к вопросу выше:

Просто убедитесь, что у вас есть (в разделе [core])строка

filemode=false

в .git / config, которая скажет git игнорировать исполняемый бит для файлов, которые он отслеживает.

Другой способ сделать то же самое - перейти в корневой каталог.git repo в терминале и введите:

git config core.filemode false

Обратите внимание, что изменение этого параметра иногда необходимо, но в противном случае лучше сохранить поведение по умолчанию.Во многих случаях важно, чтобы git правильно отслеживал права доступа к файлам, чтобы ваш проект мог работать как надо.

...