2009-12-11 4 views
17

Пройдитесь ко мне, я не из командной строки ... У нас есть GIT, настроенный в нашей сети Windows (с использованием msysgit & GitExtensions). У каждого из нас есть свои собственные репозитории, и мы нажимаем на удаленный «голый» репозиторий на одном из наших серверов. Все хорошо.GIT клон к внешнему накопителю для резервного копирования

Я пытаюсь настроить запланированное задание на сервере, которое будет клонировать репозиторий с диска C на внешний диск (на F) - с некоторым трудностью заставить это работать. Я могу сделать это в GIT bash относительно легко, но я не уверен, как сохранить это в пакетном файле, который я могу затем выполнить.

То, что я до сих пор:

rmdir F:\GitClone /s /q 
mkdir F:\GitClone 
mkdir F:\GitClone\Repo1 
CD /D F:\GitClone\Repo1\ 
GIT CLONE /c/GIT/Repo1/ 

Я также попытался следующая за последнюю строку:

GIT CLONE C:\GIT\Repo1\ 

Но это не работает, либо ... Я немного вздрогнул и был бы рад помочь. Диск C содержит наши босые репозиториев и привод F является нашим внешним диском, который мы поменяться ежедневно ...


Несколько ответов здесь, которые были очень полезны, спасибо. Мой итоговый ответ, вероятно, является их комбинацией, поэтому можно указать, как запустить скрипт bash и как скрипт pull/push.

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

ответ

26

Пожалуйста, обратите внимание, что сам мерзавец отлично при копировании только необходимых изменений в клонированный репозиторий.

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

Хорошо, давайте начнем с создания репо

$ cd /tmp 
$ mkdir myrepo && cd myrepo 
$ touch hi && git add . && git commit -m "bla" 

Итак, это ваше хранилище. Теперь мы создадим клон:

$ cd /tmp 
$ mkdir backup && cd backup 
$ git --bare init 
Initialized empty Git repository in /tmp/backup/ 

Теперь давайте создадим свой репозиторий для регулярного резервного копирования ...

$ cd /tmp/myrepo 
$ git remote add backup /tmp/backup 
$ git config remote.backup.mirror true 

Затем скопировать все к резервной копии:

$ git push backup 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 206 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To /tmp/backup 
* °new branch§  master -> master 

И посмотреть, если он работал :

$ cd /tmp/backup 
$ git log 
commit d027b125166ff3a5be2d7f7416893a012f218f82 
Author: Niko Schwarz <niko.schwarzàgmail.com> 
Date: Fri Dec 11 12:24:03 2009 +0100 

    hi 

Tad a, вы настроены. Поэтому весь ваш скрипт должен сделать, это выдать git push backup. Нет необходимости многократно отбрасывать старую резервную копию.

Альтернативой вы можете иметь rsync сделать все это для вас:

rsync -av rsync://rsync.samba.org/ftp/unpacked/rsync /dest/dir/ 

Offby Пользователь добавляет: Начиная с версии 1.5.4, «мерзавец дистанционного добавить» принимает «--mirror» вариант, что избавляет вас от необходимости «git config remote.origin.mirror true» и от необходимости передавать --mirror на «git push».

+0

Почему вы используете rsyncing из голого репо? У него не будет извлеченных файлов. Если вы --exclude = .git /, то вы не будете копировать ничего. Кроме того, почему ваш repositroy нажав на резервную копию? Почему резервная копия не извлекается из репо? – Pod

+0

Я не, я предлагаю два разных способа: rsyncing, или копирование на голый репо для копирования. И, на мой взгляд, более естественно подталкивать резервную копию, чем тянуть ее. – nes1983

+0

А теперь я вижу, что вы имеете в виду, извините, заявление об исключении по ошибке ошибочно. – nes1983

4

Вы всегда можете просто запланировать bash.exe mybashbackupscript.sh

Во всяком случае, с точки зрения окон:

rmdir F:\GitClone /s /q 
mkdir -p F:\GitClone\Repo1 
copy c:\GIT\Repo1\.git F:\GitClone\Repo1\.git 

git clone не делает ничего любитель, чем это.

Редактировать: как заметил кто-то другой, лучше всего просто создать новое резервное копирование и просто потянуть/извлечь. Вы будете избегать каких-либо проблем с экранным .git :)

+0

Это своего рода мое мышление в минуту. – Paddy

4

Поскольку git команда немного странно, вы должны использовать call для выполнения каких-либо команд Git из пакетного файла:

rmdir F:\GitClone /s /q 
mkdir F:\GitClone 
CD /D F:\GitClone\ 
call GIT CLONE c/GIT/Repo1/ 
+0

это была моя проблема, а также –

1

К сожалению, я могу 't комментариев сообщений, но я тоже думал о копировании .git, но что произойдет, если .git будет скопирован во время pull?

В любом случае, зачем копировать весь материал, как вы могли время от времени приносить дельты?

Инициализация резервного копирования (в F: \ GitClone \ Repo1 пусто)

git init 
git add remote origin /c/GIT/Repo1 

Тогда ваш "скрипт резервного копирования дельта" будет просто сделать:

cd /f/GitClone/Repo1 
git fetch origin 
0

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

Просто создайте репозиторий на внешнем диске (с использованием git cloneраз), а затем запустить git pull на нем регулярно.

+0

Эти диски ежедневно меняются местами - я хочу, чтобы они создавались, если они еще не были. – Paddy

0

Проблема решена:

h: (flash drive) 
cd \ 
mkdir YourProject 
cd YourProject 
git init 
git remote add origin [email protected]:user/YourProject.git 
git remote add local C:\w\YourProject 
git pull origin master 
git push local master