Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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/23.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
Linux 如何将git从一台服务器备份到另一台服务器_Linux_Git_Shell - Fatal编程技术网

Linux 如何将git从一台服务器备份到另一台服务器

Linux 如何将git从一台服务器备份到另一台服务器,linux,git,shell,Linux,Git,Shell,我在我的一台服务器上安装了gitolite,它有很多git存储库。因此,我决定备份所有这些,并找到关于git bundle。并在此基础上创建了以下脚本 #!/bin/bash projects_dir=/home/bean/git/ backup_base_dir=/home/bean/gitbackup/ test -d ${backup_base_dir} || mkdir -p ${backup_base_dir} pushd $projects_dir for repo in `fi

我在我的一台服务器上安装了gitolite,它有很多git存储库。因此,我决定备份所有这些,并找到关于
git bundle
。并在此基础上创建了以下脚本

#!/bin/bash
projects_dir=/home/bean/git/
backup_base_dir=/home/bean/gitbackup/

test -d ${backup_base_dir} || mkdir -p ${backup_base_dir}
pushd $projects_dir

for repo in `find $projects_dir -type d -name .git`; do
    cd $repo/..
    this_repo=`basename $PWD`
    git bundle create ${backup_base_dir}/${this_repo}.bundle --all
    cd -
done
popd

cd $backup_base_dir
rsync  -r . username@ip_address:/home/bean1/git_2nd_backup
在上面的脚本中,我首先在同一台机器上备份存储库,但在脚本
backup\u base\u dir=/home/bean/gitbackup/
中提到的不同文件夹中,然后使用
rsync
在另一台机器/服务器上备份。所以我的问题是,有没有办法避免在同一台机器上进行备份,我可以直接备份到另一台服务器/机器上。只是想消除在同一台机器上的备份,并想直接备份到服务器机器上


对于GitHub,这两台机器/服务器都是
Ubuntu16

,其工作原理如下:

for repo in $(/usr/local/bin/curl -s -u <username>:<api-key> "https://api.github.com/user/repos?per_page=100&type=owner" | 
    /usr/local/bin/jq -r '.[] | .ssh_url')
do
   /usr/local/bin/git clone --mirror ${repo}
done
基本上,将扫描服务器上运行代码的所有目录,并尝试查找
git-remotes
以JSON格式返回找到的所有远程的列表

稍后从备份服务器上,您可以使用与Github和备份相同的方法,而无需重复

在这种情况下,您可以这样使用它:

for repo in $(curl -s your-server:8080 | jq -r '.[][]')
do
   /usr/local/bin/git clone --mirror ${repo}
done

对于GitHub,这是有效的:

for repo in $(/usr/local/bin/curl -s -u <username>:<api-key> "https://api.github.com/user/repos?per_page=100&type=owner" | 
    /usr/local/bin/jq -r '.[] | .ssh_url')
do
   /usr/local/bin/git clone --mirror ${repo}
done
基本上,将扫描服务器上运行代码的所有目录,并尝试查找
git-remotes
以JSON格式返回找到的所有远程的列表

稍后从备份服务器上,您可以使用与Github和备份相同的方法,而无需重复

在这种情况下,您可以这样使用它:

for repo in $(curl -s your-server:8080 | jq -r '.[][]')
do
   /usr/local/bin/git clone --mirror ${repo}
done

我需要它用于我的
本地git
我已经配置了
gitolite
。您提到要从服务器A备份到服务器B,而不需要复制本地fist,我建议的解决方案是只需远程拉取存储库,从而避免本地重复,在任何情况下,使用
gitolite
都会更容易,因为你可以解析配置文件,只需拉远程,但一切都是相对的我需要它来实现我的
local git
我已经配置了
gitolite
。你提到过,我想从服务器A备份到服务器B,而不需要复制本地文件,我建议的解决方案是只远程拉取存储库,因此可以避免本地重复,在任何情况下,使用
gitolite
都会更容易,因为您可以解析配置文件,只需远程拉取,但一切都是相对的