Как использовать git для синхронизации файлов? - PullRequest
6 голосов
/ 23 января 2010

Мне нужна распределенная синхронизация файлов.Итак, в первую очередь, какие-либо предложения?Моя идея - git, так как скорость - это проблема.

Мои знания по git довольно просты, но вот что я сделал.

Я скачал портативный git (я на ПК, поэтому msysgit).Я поместил копию в c: \ root \ git и копию в c: \ root \ git c: \ client \ git \

Я создал каталог c: \ temp \ root \ content и создал несколько файловв нем

c:\root\content>..\git\bin\git.exe init
c:\root\content>..\git\bin\git.exe add *
c:\root\content>..\git\bin\git.exe commit -f
c:\client>..\git\bin\git.exe clone file:///c:\root\content

Это создает каталог содержимого, но он пуст!Файлы, сохраненные в корневом каталоге, отсутствуют.

Также, когда я выполняю команду pull, я получаю

C:\temp\client\content\content>c:\temp\client\git\bin\git.exe pull
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Your configuration specifies to merge the ref 'master' from the remote, but no such ref was fetched

Очевидно, что мне не хватает концепции.Что происходит?

Ответы [ 5 ]

5 голосов
/ 07 июня 2012

Регистрация в http://sparkleshare.org/

Sparkleshare предоставляет вам пользовательский интерфейс, похожий на Dropbox, за исключением того, что его базовый механизм синхронизации - git. Это не самая стабильная вещь, но вы можете посмотреть ее вывод в журнале, чтобы увидеть, какие команды git достигнут безупречной синхронизации. Как только вы изучите их, вы можете просто сделать свои собственные стабильные скрипты синхронизации. Я думаю, что большинство проблем с sparkleshare в графическом интерфейсе.

4 голосов
/ 25 августа 2013

git-annex может быть еще одним инструментом для рассмотрения.

1 голос
/ 23 января 2010

Я только что попытался воспроизвести ваши шаги.

git commit -f ничего не делал с только что установленной версией 1.6.5.1. Но это должно дать вам длинное сообщение об ошибке.

mkdir repo1 repo2
cd repo1
git init
( create files )
git add *
git commit -m "initial commit"
cd ..\repo2
git clone ..\repo1 .

и файлы, которые я создал в repo1, появляются в repo2.

1 голос
/ 06 ноября 2010

Как предложил Давр в комментариях, вы можете попробовать Unison . Благодаря синхронизации всех ваших хостов с центральным концентратором вы можете использовать n-way синхронизацию. Unison не сохраняет историю, поэтому, если вы хотите, вы должны запланировать ежедневное выполнение rdiff-backup на одном из ваших хостов (предпочтительно, на каком у вас самый большой и надежный жесткий диск). Оба инструмента имеют двоичные файлы Windows.

Я также рассмотрел использование Git для синхронизации файлов, но ручное добавление, фиксация, извлечение и объединение - это слишком много работы (инструмент полезен, только если вы его используете). В моей голове я разработал небольшой процесс в системном трее Python или Ruby, чтобы следить за изменениями в вашем репозитории, ворчать о вас, когда он грязный, иметь опции для автоматической фиксации после периода без изменений, а также выполнять автоматическое push / pull. Разрешение конфликтов слияния будет осуществляться с использованием существующего инструмента.

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

1 голос
/ 23 января 2010

Git может быть хорошим инструментом для синхронизации источника между разработкой и производством, по одной причине: он позволяет легко «оперативно исправлять» производство и возвращать исправление обратно в дерево. Конечно, вы всегда должны воспроизводить ошибку в среде разработки или тестирования и исправлять ее там, но иногда вы не можете.

Вместо git add * используйте git add .

Используйте git status перед фиксацией, чтобы убедиться, что соответствующие файлы подготовлены для фиксации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...