Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows GIT克隆到外部驱动器进行备份_Windows_Git_Backup - Fatal编程技术网

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

Windows GIT克隆到外部驱动器进行备份,windows,git,backup,Windows,Git,Backup,我们在windows网络中设置了GIT(使用msysgit和GitExtensions)。我们每个人都有自己的存储库,我们将其推送到一台服务器上的远程“裸”存储库。一切都好 我正在尝试在服务器上设置一个计划作业,这将把一个存储库从C驱动器克隆到一个外部驱动器(在F上)——要让它正常工作有些困难。我可以在GIT bash中相对轻松地完成这项工作,但我不确定如何将其保存到批处理文件中,然后再保存到scehdule中 到目前为止,我所拥有的: rmdir F:\GitClone /s /q mkdir

我们在windows网络中设置了GIT(使用msysgit和GitExtensions)。我们每个人都有自己的存储库,我们将其推送到一台服务器上的远程“裸”存储库。一切都好

我正在尝试在服务器上设置一个计划作业,这将把一个存储库从C驱动器克隆到一个外部驱动器(在F上)——要让它正常工作有些困难。我可以在GIT bash中相对轻松地完成这项工作,但我不确定如何将其保存到批处理文件中,然后再保存到scehdule中

到目前为止,我所拥有的:

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脚本


需要将这些功能结合起来才能发挥作用,以便在交换各种驱动器时感到愉快(即,如果存储库不存在于外部驱动器上,则克隆存储库,然后在其他情况下仅提取差异),但这应该是可行的。感谢大家。

您可以随时安排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中为空)

然后,您的“增量备份脚本”将只执行以下操作:

cd /f/GitClone/Repo1
git fetch origin

请注意,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

用户Offby adds:自1.5.4版以来,“git remote add”采用了“-mirror”选项,这使您既不必“git config remote.origin.mirror true”,也不必将--mirror传递到“git push”。

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

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

问题解决:

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

这正是我当时的想法。你为什么要从一个无担保的回购中同步?它将没有签出的文件。如果您--exclude=.git/,则本质上不会复制任何内容。还有,为什么你的位置会被推到备份位置?为什么备份不能从回购中提取?我不是,我建议两种不同的方法:重新同步,或者复制到裸回购中进行复制。在我看来,推式备份比拉式备份更自然。啊,现在我明白你的意思了,对不起,排除声明错漏了。+1:备份所需要/想要的就是一份无担保回购。不过,很可能您实际上希望执行“git push——镜像源代码”而不是“git push源代码主代码”,以确保备份所有分支。或者只需设置“git config remote.origin.mirror true”,然后设置“git push origin”。可能会将远程“备份”而不是“源站”;)从1.5.4版开始,“git remote add”采用了“-mirror”选项,这样您就不必再“git config remote.origin.mirror true”,也不必再将--mirror传递给“git push”。这些驱动器每天都会被换入换出——如果还没有,我想确保它会被创建。
rsync -av rsync://rsync.samba.org/ftp/unpacked/rsync /dest/dir/
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