繁体   English   中英

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

[英]GIT clone to external drive for 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脚本。

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

请注意,git本身非常适合将所需的更改复制到克隆的存储库。

如果要定期更新repo的副本,请执行以下操作:创建裸存储库作为备份存储库,然后重复推送所有新更改(无需删除旧备份)。

好吧,让我们从创建你的回购开始吧

$ 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/

现在,让我们设置你的repo进行常规备份......

$ 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”。

您可以随时安排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 :)的任何访问问题

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

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

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

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

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

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

那么你的“delta备份脚本”就是:

cd /f/GitClone/Repo1
git fetch origin

问题解决了:

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

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

只需在外部驱动器上创建repo(使用git clone 一次 ),然后定期运行git pull

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM