代码之家  ›  专栏  ›  技术社区  ›  Paddy

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

  •  18
  • Paddy  · 技术社区  · 16 年前

    我正在尝试在服务器上设置一个计划作业,这将把一个存储库从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驱动器是我们每天交换的外部驱动器。。。


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

    6 回复  |  直到 7 年前
        1
  •  30
  •   nes1983    16 年前

    如果希望定期更新回购协议的副本,请执行以下操作:创建一个裸存储库作为备份存储库,然后重复将所有新更改推送到该存储库(无需删除旧备份)。

    好的,让我们从创建回购协议开始

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

    用户Offby添加

        2
  •  4
  •   Igor Zevaka    16 年前

    因为 git 您必须使用的命令有点奇怪 call 要从批处理文件执行任何git命令,请执行以下操作:

    rmdir F:\GitClone /s /q
    mkdir F:\GitClone
    CD /D F:\GitClone\
    call GIT CLONE c/GIT/Repo1/
    
        3
  •  4
  •   Pod    16 年前

    无论如何,用windows术语来说:

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

    git clone

        4
  •  1
  •   Tryum    16 年前

    抱歉,我不能评论帖子,但我也在考虑复制.git,但是如果在拉取过程中复制了.git会怎么样?

    不管怎么说,为什么要把所有的东西都复制下来,因为你可以时不时地获取三角洲呢?

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

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

    cd /f/GitClone/Repo1
    git fetch origin
    
        5
  •  0
  •   Aaron Digulla    16 年前

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

    只需在外部驱动器上创建回购(使用 git clone ),然后运行 git pull 定期检查。

        6
  •  0
  •   Dmitry Ponyatov    13 年前

    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