4

У меня есть git-репозиторий в папке Dropbox, совместно используемый компьютером с Linux и Windows. Я пытаюсь синхронизироваться только на компьютере с Windows, потому что я знаю о "проблемах", которые могут возникнуть. Иногда я делаю небольшой коммит на Linux, чтобы отследить свои изменения,

Но теперь мне действительно интересно, что делает git: Id не трогал файл fonttest.tex , но git сообщает, что он был изменен:

towi@havaloc:~/Dropbox/latex$ git status fonttest.tex
# On branch master
...
#   modified:   fonttest.tex

И diff перечисляет весь файл: все строки удалены и вставлены снова. Хорошо, вероятно, проблема CRLF. Поэтому я прошу todos и fromdos конвертировать туда и обратно с и без CR и CRLF. Но - вы уже догадались - без изменений для git: все строки изменились.

Хм, подумал я, поскольку я знаю, что ничего не изменилось, я получаю чистую копию:

mv fonttest.tex fonttest.tex1
git checkout fonttest.tex

И потому что я любопытный человек, хочу увидеть разницу

diff fonttest.tex fonttest.tex1

ничего такого. В самом деле?

towi@havaloc:~/Dropbox/latex$ md5sum fonttest.tex*
d3544bd060504ebb682b2e446375b3b3  fonttest.tex
d3544bd060504ebb682b2e446375b3b3  fonttest.tex1

В самом деле. И что думает об этом?

towi@havaloc:~/Dropbox/latex$ git status fonttest.tex
# On branch master
...
#   modified:   fonttest.tex

Чувак, ты только что проверил это для меня! В чем тут дело? Почему git думает, что файл изменился?

Вот выдержка из моего конфига. Я внес некоторые коррективы в CRLF, следуя чьему-то совету по обмену Dropbox. Но... Я просто не могу следовать за мерзавцем здесь.

towi@havaloc:~/Dropbox/latex$ git config -l       
diff.renames=copies
apply.ignorewhitespace=change
apply.whitespace=nowarn
core.whitespace=cr-at-eol
core.repositoryformatversion=0
core.filemode=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.eol=lf
core.autocrlf=input

2 ответа2

1

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

Я думаю, что проблема, с которой вы столкнулись, как-то связана с этим. Возможно, это проблема с окончанием строки, поскольку ваш компьютер с Windows будет использовать \r\n а ваш компьютер с Linux будет использовать \n .

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

Вы бы сделали это на вашем Linux-компьютере:

mv ~/Dropbox/latex ~/
cd ~/latex
git init --bare ~/Dropbox/latex.git
git remote add dropbox ~/Dropbox/latex.git
git push dropbox master

Затем на вашем компьютере с Windows сделайте это:

cd %USERPROFILE%
git clone Dropbox\latex.git
cd latex
git remote rename origin dropbox

С этого момента вы выполняете всю свою работу в ~/latex (Linux) и %USERPROFILE%\latex (Windows). Когда вы делаете коммиты, которыми хотите поделиться, вы будете использовать git push dropbox master в одном репо и git pull dropbox master в другом.

0

Вы извлекаете потенциально важную информацию из вывода состояния git. Состояние git говорит: "Изменения не подготовлены для фиксации" или "Изменения должны быть зафиксированы". Если в нем указано последнее, причина, по которой файл всегда отображается как измененный, заключается в том, что у вас есть несвязанные изменения в индексе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .