GIT clone to external drive for backup

前端 未结 6 765
忘掉有多难
忘掉有多难 2020-12-23 15:13

We have GIT set up within our windows network (using msysgit & GitExtensions). We each have our own repositories and we push to a remote \'bare\' repository on one of o

相关标签:
6条回答
  • 2020-12-23 15:27

    Please note that git itself is excellent at copying only the needed changes to a cloned repository.

    If you want a copy of your repo to be regularly updated, do this: You create a bare repository as a backup repository, and then repeatedly push all new changes there (no need to delete the old backup).

    Ok, let's start by creating your repo

    $ cd /tmp
    $ mkdir myrepo && cd myrepo
    $ touch hi && git add . && git commit -m "bla" 
    

    So, this is your repository. Now we create the clone:

    $ cd /tmp
    $ mkdir backup && cd backup 
    $ git --bare init
    Initialized empty Git repository in /tmp/backup/
    

    Now, let's set up your repo for regular backups …

    $ cd /tmp/myrepo
    $ git remote add backup /tmp/backup
    $ git config remote.backup.mirror true
    

    Then copy everything to the backup:

    $ 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
    

    And see if it worked:

    $ cd /tmp/backup
    $ git log
    commit d027b125166ff3a5be2d7f7416893a012f218f82
    Author: Niko Schwarz <niko.schwarzàgmail.com>
    Date:   Fri Dec 11 12:24:03 2009 +0100
    
        hi
    

    Tada, you're set. Therefore, all your script needs to do is to issue git push backup. There's exactly no need to repeatedly throw away the old backup.

    The alternative is you can have rsync do it all for you:

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

    User Offby adds: Since version 1.5.4, "git remote add" takes a "--mirror" option, which saves you both from having to "git config remote.origin.mirror true", and from having to pass --mirror to "git push".

    0 讨论(0)
  • 2020-12-23 15:30

    Sorry, I can't comment posts, but I was thinking too about copying the .git, but what happens if the .git is copyed during a pull ?

    Anyway, why copying the whole stuff as you could fetch the deltas from time to time ?

    Initialization of backup : (in F:\GitClone\Repo1 empty)

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

    Then your "delta backup script" would just do :

    cd /f/GitClone/Repo1
    git fetch origin
    
    0 讨论(0)
  • Because git command is little bit weird you have to use call to execute any git commands from a batch file:

    rmdir F:\GitClone /s /q
    mkdir F:\GitClone
    CD /D F:\GitClone\
    call GIT CLONE c/GIT/Repo1/
    
    0 讨论(0)
  • 2020-12-23 15:43

    You could always just schedule bash.exe mybashbackupscript.sh

    Anyway, in windows terms:

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

    git clone doesn't really do anything fancier than that.

    edit: as someone else pointed out, it's probably best to just make a new backup repo and just pull/fetch into that. You'll avoid any accesing issues with the .git :)

    0 讨论(0)
  • 2020-12-23 15:46

    Why do you delete the clone all the time? What is the point of cloning an existing repository when you just want to copy the file?

    Just create the repo on the external drive (using git clone once), and then run git pull on it regularly.

    0 讨论(0)
  • 2020-12-23 15:54

    Problem solved:

    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
    
    0 讨论(0)
提交回复
热议问题