2009-12-11 17 views
17

Gehen Sie einfach auf mich, ich bin nicht viel von einer Befehlszeile Mann ... Wir haben GIT in unserem Windows-Netzwerk eingerichtet (mit msysgit & GitExtensions). Wir haben alle unsere eigenen Repositories und wir pushen zu einem entfernten "leeren" Repository auf einem unserer Server. Alles gut.GIT Clone auf externes Laufwerk für Backup

Ich versuche einen geplanten Job auf dem Server einzurichten, der ein Repository vom C-Laufwerk auf ein externes Laufwerk (auf F) klont - Schwierigkeiten dabei zu haben. Ich kann das relativ einfach in GIT bash machen, aber ich bin mir nicht sicher, wie ich das in eine Batch-Datei speichern kann, die ich dann skalieren kann.

Was ich habe, so weit:

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

Ich habe versucht, auch die folgenden für die letzte Zeile:

GIT CLONE C:\GIT\Repo1\ 

Aber das funktioniert nicht, entweder ... ich bin wenig ratlos und würde mich über Hilfe freuen. Das Laufwerk C enthält bloße Repositories und das F-Laufwerk ist unser externes Laufwerk, das wir täglich tauschen ...


Mehr Antworten hier, die sehr nützlich gewesen sein, danke. Meine resultierende Antwort ist wahrscheinlich eine Kombination aus diesen, so dass Punkte darauf hinweisen, wie man ein Bash-Skript ausführt und wie man das Pull/Push-Skript ausführt.

müssen diese zusammen zu arbeiten, so dass es glücklich ist, wenn verschiedene Laufwerke ausgetauscht werden (dh ein Repository klonen, wenn es nicht auf dem externen Laufwerk vorhanden ist und dann nur die Unterschiede ziehen), aber das sollte machbar sein. Dank an alle.

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

git clone nicht wirklich alles tun, schicker als das: Wie dem auch sei, in den Fenstern Begriffe

Antwort

26

Bitte beachten Sie, dass git selbst ist ausgezeichnet Kopieren Sie nur die erforderlichen Änderungen an einem geklonten Repository.

Wenn Sie möchten, dass eine Kopie Ihres Repository regelmäßig aktualisiert wird, führen Sie Folgendes aus: Sie erstellen ein leeres Repository als Backup-Repository und drücken dann wiederholt alle neuen Änderungen dorthin (die alte Sicherung muss nicht gelöscht werden).

Ok, lassen Sie uns zunächst Ihre Repo-Erstellung

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

Also, das ist das Repository. Nun erstellen wir den Klon:

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

Nun lassen Sie uns Ihre Repo für regelmäßige Backups einrichten ...

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

Dann ist alles in die Sicherungskopie:

$ 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 

Und sehen, ob es funktioniert hat :

$ 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, du bist festgelegt. Daher muss Ihr Skript nur git push backup ausgeben. Das alte Backup muss nicht mehr weggeworfen werden.

Die Alternative ist, dass Sie rsync tun alles für Sie haben kann:

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

Benutzer Offby fügt: Seit der Version 1.5.4, "git remote add" nimmt eine "--mirror" Option, Das erspart Ihnen beide, "git config remote.origin.mirror true" zu setzen, und muss "--mirror" an "git push" übergeben.

+0

Warum rsyncing Sie aus einem bloßen Repo? Es werden keine Dateien ausgecheckt. Wenn Sie --exclude = .git /, dann werden Sie nichts kopieren. Auch, warum ist Ihre Repostroy drängen auf die Sicherung? Warum zieht das Backup nicht aus dem Repo? – Pod

+0

Ich bin nicht, ich schlage zwei verschiedene Möglichkeiten vor: rsyncing oder Kopieren in eine leere Repo für das Kopieren. Und für mich ist es natürlicher, ein Backup zu schieben als es zu ziehen. – nes1983

+0

Ah, jetzt sehe ich, was du meinst, sorry, die Exclude-Anweisung ist versehentlich eingefügt worden. – nes1983

4

Man konnte immer nur bash.exe mybashbackupscript.sh

planen.

edit: wie jemand anders darauf hingewiesen hat, ist es wahrscheinlich am besten, nur ein neues Backup-Repo zu machen und einfach/holen in das. Sie werden alle accesing Probleme mit dem .git vermeiden :)

+0

Das irgendwie in der Minute, mein Denken ist. – Paddy

4

Da git Befehl wenig ist seltsam Sie call verwenden, haben keine git Befehle aus einer Batch-Datei auszuführen:

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

das war mein Problem auch –

1

Sorry, ich kann Kommentare nicht kommentieren, aber ich dachte auch daran, das .git zu kopieren, aber was passiert, wenn das .git während eines Pull-Vorgangs kopiert wird?

Wie auch immer, warum kopieren Sie die ganzen Sachen, wie Sie die Deltas von Zeit zu Zeit holen könnten?

Initialisierung der Sicherung: (in F: \ GitClone \ Repo1 leer)

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

Dann wird Ihr "Delta Backup-Skript" würde nur tun:

cd /f/GitClone/Repo1 
git fetch origin 
0

Warum löschen Sie den Klon die ganze Zeit? Wozu dient das Klonen eines vorhandenen Repositorys, wenn Sie nur die Datei kopieren möchten?

Erstellen Sie einfach den Repo auf dem externen Laufwerk (git cloneeinmal verwenden), und dann git pull auf sie regelmäßig ausgeführt werden.

+0

Diese Laufwerke werden täglich ein- und ausgelagert - ich möchte sicherstellen, dass es erstellt wird, wenn nicht schon da ist. – Paddy

0

Problem gelöst:

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