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