Подтвердить что ты не робот

GIT клон для внешнего диска для резервного копирования

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

Я пытаюсь настроить запланированное задание на сервере, которое будет клонировать репозиторий с диска 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 script и как script pull/push.

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

4b9b3361

Ответ 1

Обратите внимание: сам git отлично копирует только необходимые изменения в клонированный репозиторий.

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

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

$ 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

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

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

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

Пользовательское добавление добавляет. Начиная с версии 1.5.4, "git remote add" принимает параметр "--mirror", что избавляет вас от необходимости иметь "git config remote. origin.mirror true", и от необходимости проходить --mirror до "git push".

Ответ 2

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

В любом случае, в терминах windows:

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

git clone действительно не делает ничего более привлекательного, чем это.

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

cd /f/GitClone/Repo1
git fetch origin

Ответ 5

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

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

Ответ 6

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

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