Я использую часть настольного программного обеспечения, которое выполняет довольно сложную работу над многочисленными файлами, а использование его с файлами, открытыми из Dropbox, вызвало серьезные проблемы с потерей данных в прошлом , (из-за синхронизации Dropbox во время работы программного обеспечения) Файлы (некоторые тексты, некоторые двоичные) имеют решающее значение, поэтому я хочу как можно больше защитить их от повреждений, и мне нужно использовать файлы с нескольких компьютеров и вы хотите, чтобы вернуться в историю, если они испорчены, поэтому использование git, похоже, идеально подходит для этого. Но я довольно новичок в этом.Как использовать git с Dropbox в одной пользовательской среде
Примечание: Любой данный пользователь будет работать только с собственными файлами, поэтому нет сценария, в котором несколько пользователей будут нажимать на одно репо. Каждый пользователь будет иметь свои собственные файлы, отслеживаемые в собственном репо в своем собственном экземпляре Dropbox. Весь смысл состоит в том, чтобы эта возможность была уникальной для каждого пользователя, поэтому их файлы, в основном, поддерживаются и управляются версиями через git и Dropbox.
После прочтения немного (особенно the top two answers here и this great discussion и this article on bare vs non-bare repos), кажется, есть несколько различных подходов с большим количеством за и против обсуждения, и я задаюсь вопросом, какой подход ниже будет лучше в данном конкретном одно- пользовательская ситуация?
В принципе, варианты, которые я вижу, - это использовать Dropbox как однопользовательский git-сервер, поскольку он содержит голый репо, который я каждый раз клонирую локально или не имею метафорического сервера и просто использую Dropbox в качестве файла сервер с не-голым репливом git, который я копирую (полностью) с/на каждый раз.
Вариант 1: Голые репо в Dropbox, скрипт клонирует его в локальный рабочий каталог:c:\dropbox\master.git
является голой репо, и сценарий делает git clone c:\dropbox\master.git c:\working
, запускает программное обеспечение против полученных файлов в c:\working
, затем делает git add
и git commit
и git push origin master
и удаляет c:\working
, а затем его выполнение.
Вариант 2: Non-голое репо в Dropbox, сценарий копирует его в локальный рабочем каталог: После копирования всего c:\dropbox\master
каталога на c:\working
он запускает программу против файлов в c:\working
, затем делает git add
и git commit
, а затем перезаписывает c:\dropbox\master
с содержимым c:\working
и удаляет c:\working
и его выполнение.
Окончательный сценарий powershell также отключит службу Dropbox до того, как он что-нибудь сделает, и запустит ее после того, как она совершит (вариант 1) или копии (вариант 2) обратно в мастер в Dropbox. Эта часть легко на самом деле и гарантирует, что Dropbox не изменит никаких файлов, пока работает локальное репо. И поскольку это будет однопользовательский процесс, я (или кто-то) может подождать несколько минут, чтобы Dropbox завершил синхронизацию при первой загрузке.
Вариант 1 кажется более «git-ish», но при использовании однопользовательского сценария вариант 2 может быть немного проще (только 1 репо для работы вместо 2), но я не уверен, есть ли какие- gotchas "Мне здесь не хватает.
Спасибо за любые советы/идеи/и т. Д.
Да, но у этого есть git repo в Dropbox, удвоение как рабочая папка? Если это так, что не является жизнеспособным, поскольку мы не можем иметь доступ к программному обеспечению для файлов в Dropbox. Даже если Dropbox отключен во время работы программного обеспечения. После того, как он был снова включен, мы однажды испытали внезапную 3-стороннюю синхронизацию из 3 систем, которые закончили нарушение приложения. Это не ошибка Dropbox по сути, приложение просто смехотворно хрупко и не имеет никакого отношения к * любой * подделке его файловой структуры, но это то, с чем мне приходится иметь дело. – Dave
Возможно, проблема заключается в Dropbox. Почему бы вам не использовать обычный git-репозиторий, размещенный самостоятельно или один из многих популярных сервисов git-хостинга? – mkasberg