GIT克隆到外部驱动器进行备份

时间:2009-12-11 11:10:24

标签: windows git backup

我们在Windows网络中设置了GIT(使用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脚本以及如何编写pull / push脚本。

需要将这些组合在一起工作,以便在各种驱动器交换进出时很高兴(例如,如果外部驱动器上不存在,则克隆存储库,否则只会拉出差异),但这应该是可行的。谢谢大家。

6 个答案:

答案 0 :(得分:28)

请注意,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
田田,你已经定下来了。因此,您的所有脚本需要做的是发出git push backup。完全不需要反复丢弃旧备份。

另一种方法是你可以rsync为你做这一切:

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

User Offby添加:从版本1.5.4开始,“git remote add”采用“--mirror”选项,这样可以避免“git config remote.origin.mirror true” “,并且必须将--mirror传递给”git push“。

答案 1 :(得分:4)

您可以随时安排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并没有真正做到比这更好的事情。

编辑:正如其他人所指出的那样,最好只创建一个新的备份仓库,然后只需拉/取。您将避免使用.git:)

的任何访问问题

答案 2 :(得分:4)

因为git命令有点奇怪,你必须使用call从批处理文件中执行任何git命令:

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

答案 3 :(得分:1)

抱歉,我无法评论帖子,但我也在考虑复制.git,但如果在拉动过程中复制.git会怎样?

无论如何,为什么要复制整个东西,因为你可以不时地获取增量?

备份初始化:(在F:\ GitClone \ Repo1为空)

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

然后你的“delta备份脚本”就会这样做:

cd /f/GitClone/Repo1
git fetch origin

答案 4 :(得分:0)

为什么要一直删除克隆?当您只想复制文件时克隆现有存储库有什么意义?

只需在外置硬盘上创建回购(使用git clone 一次),然后定期运行git pull

答案 5 :(得分:0)

问题解决了:

h: (flash drive)
cd \
mkdir YourProject
cd YourProject
git init
git remote add origin git@github.com:user/YourProject.git
git remote add local C:\w\YourProject
git pull origin master
git push local master