Как настроить двунаправленную быструю синхронизацию файлов?

Для этого я пытаюсь использовать GIT.


Я пытаюсь разработать сценарий .sh (под Linux) для автоматической фиксации всех изменений в репозитории git и удаления всех изменений истории, кроме последней. Репозиторий должен сохранять только данные последней фиксации и очищать всю предыдущую историю (теряя все данные).

Например, я фиксирую 3 файла:

  • file1: 12 МБ;
  • file2: 4 МБ;
  • file3: 12 КБ;

После фиксации размер моей папки .git составляет примерно 25 МБ;

Теперь удаляю файл1 и файл2.

После следующего коммита моя рабочая копия составляет 12 КБ, а моя папка .git - 25 МБ.

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

Проблема в том, что мне нужно сделать это с помощью ОДНОЙ НЕИНТЕРАКТИВНОЙ КОМАНДНОЙ СТРОКИ, потому что мне нужно выполнить сценарий cron.

Просматривая форумы часами, я не нашел решения для этого вопроса.


Настоящий вопрос: как настроить двунаправленную быструю синхронизацию файлов? Папка для синхронизации большая (20 ГБ с тысячами файлов). Первая синхронизация будет очень медленной, без проблем, но вторая должна быть быстрее, не более 30-40 секунд, сравнивая только измененные файлы ...

Спасибо за любую помощь.


person Rimon Soliman    schedule 03.04.2012    source источник
comment
Хм. Если вы собираетесь удалять историю таким образом, зачем вообще использовать git ? Если вы настаиваете, взгляните на команду git filter-branch   -  person brice    schedule 03.04.2012
comment
Я использую git, потому что пытаюсь разработать полностью автоматизированную файловую синхронизацию на основе git ... :-) В файловой синхронизации мне не нужна история. Я уже пробовал git filter-branch, но не работал ...   -  person Rimon Soliman    schedule 03.04.2012
comment
файловая синхронизация? = ›Почему не rsync?   -  person ArjunShankar    schedule 03.04.2012
comment
правильный вопрос, но синхронизация должна быть двунаправленной и автоматически выполняться каждую минуту. rsync (или другая система синхронизации) не использует базу данных или какой-либо файловый индекс, и каждый запуск будет сравнивать ВСЕ локальные и удаленные файлы. у меня много рабочей копии ГБ в тысячах файлов, и rsync будет очень медленным ... (я думаю). если вы знаете, как настроить быструю двунаправленную синхронизацию с помощью rsync, пожалуйста, научите меня :-)   -  person Rimon Soliman    schedule 03.04.2012
comment
Вы не упомянули эти детали в вопросе. И ИМО, взлом git для этого может быть не лучшим способом. Я думаю, ваш вопрос должен заключаться в том, как настроить двунаправленную быструю синхронизацию? Надеюсь, другие знают.   -  person ArjunShankar    schedule 03.04.2012
comment
Я имел в виду следующее: подумайте о том, чтобы «отредактировать» свой вопрос, чтобы он отражал ваш комментарий.   -  person ArjunShankar    schedule 03.04.2012
comment
Хорошо, я отредактировал заголовок своего вопроса. Спасибо за предложение.   -  person Rimon Soliman    schedule 03.04.2012


Ответы (3)


Получите это работать быстро

Используйте AeroFS или unison.

Индивидуальное решение

Используйте inotify для Linux или его аналог на других платформах, чтобы получать уведомления об изменениях в вашей файловой системе, затем используйте librsync, libssh или аналогичный для передачи файлы поперек.

В зависимости от вашего использования вам может действительно сойти с рук запуск rsync в задании cron. Алгоритм rsync чертовски умен и при использовании передает очень мало ненужной грязи. Если вы настроите его правильно, он будет смотреть только на время последнего изменения.

Я определенно рекомендую использовать aerofs или unison, прежде чем пытаться создать специальное решение.

person brice    schedule 03.04.2012
comment
Хорошо, спасибо, я последую за вашим предложением и опубликую результаты. - person Rimon Soliman; 03.04.2012

Как настроить двунаправленную быструю синхронизацию файлов - это osync. Osync - это двунаправленная синхронизация файлов на основе rsync, которая будет использовать алгоритм обновления rsync, чтобы сэкономить некоторую пропускную способность для распространения только изменений. Проверьте это на http://www.netpower.fr/osync.

person Orsiris de Jong    schedule 18.08.2013

Этот сценарий Python, который я написал, может помочь. Попробуйте!

https://github.com/dooblem/bsync

person Marc MAURICE    schedule 15.11.2013