Использование git для управления полусинхронизированными каталогами текстовых файлов


0

Это проблема, которую трудно описать (и, конечно, трудно найти ответ), наиболее близким из того, что я обнаружил, является перемещение двух уже синхронизированных деревьев каталогов в приложение git

У меня есть две копии текстовых файлов моих документов, одна на настольном компьютере с Linux, другая на ноутбуке. Ранее я rsyncпериодически запускал синхронизацию этих файлов в обоих направлениях. Теперь я хотел бы перенести управление этой проблемой git, но мне было интересно, каким будет самый чистый способ начать.

Я разместил файлы на своем рабочем столе на удаленном gitсервере, следуя инструкциям в Интернете. Это было хорошо. Теперь проблема для меня на стороне ноутбука. Т.е. у меня уже есть наполовину синхронизированные файлы и папки на моем ноутбуке, и я не думаю, что обычно предлагаемый git cloneбудет правильным ответом на мою ситуацию, не так ли?

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


Я бы предложил использовать unison: он специально разработан для двусторонней (или многоузловой) синхронизации.
Яап Элдердж

Спасибо, unisonэто то, что я использовал, но теперь предпочитаю git.
Xpt

Ответы:


1

Посмотрите ответ, почему использование git для синхронизации не очень хорошая идея.

Вот тестовый пример, который показывает, как синхронизировать git с двумя уже заполненными каталогами.

cd /tmp
mkdir foo
cd foo
git init
echo "hello" > README.md
git add .
git commit -m "initial commit"
git remote add origin git@github.com:<myUser>/test.git
git push -u origin master

На данный момент у меня есть локальный репозиторий Git, который синхронизирован с моим сервером Git. Теперь я создам новую копию файла REDME.md, как если бы он был rsyn-ed на другой компьютер

cd /tmp
mkdir bar
cd bar
git init
echo "hello" > README.md
git add .
git commit -m "initial commit"
git remote add origin git@github.com:<myUser>/test.git
git push -u origin master

Поскольку бар позади мастера, я не могу толкнуть.

To git@github.com:<myUser>/test.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:<myUser>/test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Я пытался сделать git pull. Git объединил репозиторий, но не загрузил файл, потому что он уже существует локально.

git pull origin master Из github.com:/test *
Branch Master -> FETCH_HEAD Слияние, выполненное по «рекурсивной» стратегии.

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


Я пытался избегать использования, git pullчтобы тянуть все, так как большинство из них уже синхронизированы. Если последняя обновленная версия всегда на одной стороне (т.е. не на обеих), нужен ли мне этот подход? Если бы обновления происходили с одним и тем же файлом с обеих сторон, разве мне не пришлось бы разрешать конфликты каким-либо образом?
Xpt

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

0

Вы можете скопировать клон на свой ноутбук, а затем скопировать существующие файлы на свой ноутбук поверх рабочей копии. Затем вы можете составить объединенный файл, проверив различия, возможно восстановив удаленные строки, которые вы хотите сохранить.


0

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

Git никогда не собирался работать таким образом.

Git медленно работает с большими файлами ( 2 )

Git не синхронизирует пустые папки

Git не отслеживает метаданные файловой системы

Git не отслеживает другие проекты git (любая папка с папкой .git внутри)

Цитата с сайта GitHubs

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

https://help.github.com/articles/what-is-my-disk-quota

Если вы когда-либо работали с репо с тысячами коммитов, git работает очень медленно. Dropbox или rsync станут лучшим инструментом для работы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.