2010-09-21 4 views
6

У меня есть репозиторий git (и рабочий каталог), который хранится в моем Dropbox, поэтому я могу перемещаться между компьютерами без необходимости совершать или хранить (читать: без каких-либо усилий вообще) , Это прекрасно работает, за исключением одного незначительного раздражения, которое становится серьезным раздражением.Unsync'd Git Repository в Dropbox

Каждый раз, когда я оставляю один компьютер в полностью зафиксированном состоянии, только для того, чтобы забрать на другом компьютере, и обнаружите, что изменения в отчетах git status. Неизбежно эти изменения связаны с разрешениями. Что я не уверен в том, почему? Я предположил, что это может быть связано с тем, как Dropbox пишет файлы на компьютерах sync'd, но umask на обеих системах установлен в 0002. Я бы предположил, что значение определяет режим файлов, написанных/обновленных Dropbox, но это не будет быть первым, когда я ошибаюсь.

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

Спасибо.

UPDATE

Так вот довольно приличный репрезентативный пример хранилища рассинхронизируются даже если он полностью содержащемуся в Dropbox. Как мы говорим, мой личный ноутбук отчетности чистый рабочий каталог для одного из моих проектов:

$ git status 
# On branch develop 
nothing to commit (working directory clean) 

Моя работа ноутбук, хотя, сообщает ряд неотслеживаемых файлов. Позвольте мне еще раз сказать: untracked файлов.

$ git status 
# On branch develop 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# html/cake/console/libs/templates/ 
# ...4 more files... 
# html/cake/tests/test_app/plugins/test_plugin/views/themed/ 
nothing added to commit but untracked files present (use "git add" to track) 

Как это может быть? Мой файл ~/.gitignore также используется на обеих компьютерах (не исключается, что любой из этих путей исключен в файле игнорирования). Есть ли еще один компонент Git - или, возможно, Dropbox - который может быть в игре здесь?

ответ

1

У меня возникла эта точная проблема при тех же обстоятельствах.

Чтобы остановить файлы показывать в git status вы можете установить мерзавец игнорировать изменения режима файла:

git config core.filemode false 

Это изменение является локальным в репозиторий и будет синхронизировано вместе с файлами.

1

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

  • Можете ли вы воспроизвести это по запросу? Как?
  • Какие операционные системы вы синхронизируете между?
  • Если у вас есть git checkout -f на файлы, о которых идет речь, они получают правильные разрешения?
  • Если вы просто chmod файл в одной системе, это изменение распространяется?
+0

На ваши вопросы: нет (я вижу это часто, но не последовательно), оба компьютера Mac, я попробую это, да (по крайней мере, в краткосрочной перспективе). Я буду продолжать бурить и следить. –

+0

Поиск Google для Dropbox и разрешений на OS X возвращает http://hints.macworld.com/article.php?story=20081009204908181, но я не думаю, что это относится к ситуации, которую вы описываете. –

+0

Прошло некоторое время, чтобы воспроизвести себя. Я не потратил много времени, но я все еще не могу воспроизвести его предсказуемо. Теперь у меня есть одна система, в которой несколько файлов имеют 644 перма, а статус git показывает их неизмененный. Другая система, где одни и те же файлы - 644, а статус git - perms, измененный с 755. –

0

То, что вы используете Macs, имеет значение. Macworld Hints article, упомянутый в комментарии, объясняет проблему (но читайте в комментарии, в котором объясняется, как исправлять разрешения с помощью chmod u+rwX и т. Д., А не абсолютные разрешения, которые могут повредить вещи).

В этом Dropbox Support answer объясняется, что происходит, и как его исправить. Это связано с тем, как MacOS X Leopard (10.5) изменил использование ACL по умолчанию.

 Смежные вопросы

  • Нет связанных вопросов^_^