如何为Git存储库组织和设置镜像备份服务器?

2024-06-05

我正在将一些 svn 存储库移至 Git。所以,我基本上尝试做的是:

  • 设置一台带有裸 Git 存储库的服务器,我将从中拉取和推送到该存储库
  • 为第一台服务器上的所有存储库设置一些备份服务器。

所以,假设我的服务器上有一个目录,例如:$HOME/git/,它有裸存储库。例如:

~/git/project1.git
~/git/project2.git
~/git/project3.git
...

我的备份服务器可能是该服务器的镜像,或者将备份的数据保存在档案中或其他任何位置。我想我可以做类似的事情:

git clone --bare ssh://gitserver/~user/git/projectX.git

或者可能:

$ cd ~/git/project1.git
$ git bundle create ~/gitbackup/project1.bdl --all

然后将所有项目中的所有捆绑包复制到我的备份服务器。
然而,拥有很多项目无论采用哪种策略都会是一项乏味的任务,因此在每种情况下我都需要制作一些脚本来自动执行任务。

我想知道你们是怎么做的?也许有比我已经考虑的更好的方法来做到这一点。任何提示将不胜感激。


总体思路是:

  • 在您的备份服务器上创建裸存储库
  • have hooks http://git-scm.com/docs/githooks(可能是一个接收后挂钩 http://toroid.org/ams/etc/git-repository-mirrors)在您的主裸 Git 存储库上,自动将收到的任何内容推送到相应的 Git 备份存储库,或者通过git:协议或ssh+git:协议 https://git-scm.com/book/id/v2/Git-on-the-Server-The-Protocols#_the_ssh_protocol.

还有其他技术早在2008年 http://web.archive.org/web/20090518010102/http://www.bramschoenmakers.nl/en/node/551, 基于gibak http://web.archive.org/web/20081219090018/http://eigenclass.org/hiki/gibak-backup-system-introduction,但想法保持不变。


接收后挂钩的示例:

  • this one http://gist.github.com/68811 from 格兰特·林伯格 http://github.com/glimberg:


    #!/bin/sh
    #
    # A hook script that is called after a successful
    # commit is made.
    #
    # Place this file in .git/hooks and chmod +x

    BRANCH=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    git push origin $BRANCH
  
  • that one http://www.stopdropandrew.com/2010/01/20/making-an-authoritative-git-repo-auto-push-to-github.html(红宝石)


    #!/usr/bin/env ruby
    STDIN.read.split("\n").each do |line|
       oldrev, newrev, refname = line.split(' ')

       if refname.match(/^refs\/heads\/(.*)/)
         branch = $1

         `git push origin #{branch}`
       else
         puts "#{refname} was weird, not sure what to do."
       end
    end
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为Git存储库组织和设置镜像备份服务器? 的相关文章

  • git 中的 web.config 和 app.config 机器特定设置

    我们在不同的办公室有多个开发团队 他们需要为我们项目中的许多配置设置使用不同的值web config and app config files 我们希望使用一组合理的默认值来检查这些配置文件 这样通过检查 trunk master 分支 您
  • 致命错误:找不到“Fabric/Fabric.h”文件

    我正在使用 xcode 6 3 1 OSX 10 10 3 并且我已经在本地系统上成功配置了 crashlytics 它工作正常 并通过 Fabric 应用程序发布构建 但是当我将相同的代码库转移到 teamcity 时 它向我显示以下错误
  • 空提交的 Git 补丁

    我创建一个空提交 git commit allow empty m something important 有时它很有用 例如协调 2 个 或更多 不同的 git 树 然而 当我 git format patch 空提交被省略 因为它们不与
  • Git core.safecrlf 对具有相同行结尾的文件有不同的行为

    我有带有 VS 项目的 Windows 计算机 并且使用 Visual Studio 和 Cygwin 环境中的工具 包括 Git 有时 编辑后我会在文件中得到不同的行结尾 我想要简单的解决方案来检查文件的行尾一致性 然后再将其发送到存储库
  • 如何从旧提交创建新的 Git 分支? [复制]

    这个问题在这里已经有答案了 可能重复 最近 不太明确的问题 使用 Git 从先前的提交分支 http stackoverflow com questions 2816715 branch from a previous commit usi
  • Egit 拒绝接受 id_rsa

    我是第一次尝试在 Eclipse 中设置 egit 的 git 用户 这样我就可以继续通过 Eclipse 轻松编码 问题是 每次我尝试通过 egit 克隆存储库时 都会出现错误 无法列出可用分支 原因 ssh 电子邮件受保护 cdn cg
  • 如何在cygwin下更改git中文件的大小写?

    我们在区分大小写 不敏感的混合环境 cywgin linux 中工作 今天有人通过重命名文件 将 S 更改为 s 对我们的工作流程造成了小破坏 这导致了各种有趣的跨分支合并问题 而且说实话 没有人完全确定发生了什么 在 cygwin 的 g
  • git merge 和 git merge origin 之间的区别

    这不是一个关于git merge origin branch vs git merge origin branch git merge
  • Mac 操作系统屏幕上的 Git 自动补全

    我在 mac 上使用 git 并配置了自动完成功能 如下所示http www codethatmatters com 2010 01 git autocomplete in mac os x http www codethatmatters
  • Heroku——从多台计算机部署?

    我有两台计算机 我希望它们都能够从 github 上的同一个存储库拉取 推送 并部署到 heroku 上的同一个应用程序 我知道 Heroku 允许您在另一台计算机上克隆其 git 存储库 以便它也可以链接起来 但我不希望第二台计算机克隆
  • git lineends redux - Mac OS git 与 Windows 用户的贡献

    我在 Mac OS X 上进行开发 我有一个用户正在贡献带有 CRLF 行结尾的代码 他目前不使用 git 我创建一个分支 然后将我的工作树切换到它 我将他的文件复制到工作树中 当我尝试暂存文件时 收到错误fatal CRLF would
  • gitignore 中的文件

    我在生产服务器中有一个带有 Rails 应用程序的存储库 在存储库中有 gitignore 文件 config database yaml 每个开发客户端都有一个具有不同 config database yaml 的克隆存储库 我的问题是这
  • 推送后删除敏感数据

    因此 我正在开发一个项目并添加一个 gitignore 文件以防止包含一些敏感数据 但它无法按预期工作 现在我已经推送了它 有没有办法从远程存储库中删除它 这样历史记录中就没有它的证据了 您可以在本地恢复更改 git commit amen
  • 查看单个文件历史记录的“x”提交的完整文件差异(托管在 git 中)

    假设我在 git 中有一个名为filex code 我想看看完整代码最后的x该文件的版本每个更改的部分都突出显示 全部集中在一处 所以一个x 窗格提交历史记录filex code 几乎就像我在做一个x paned diff 但查看历史版本而
  • 通过防火墙后面的 ssh 访问 git 存储库

    我想在仅允许 http 代理访问的公司防火墙后面访问 克隆 推 拉 私有 通过 ssh git 存储库 我已经编写了一个强大的 Java 守护进程 程序 基于 JSCh 类库 它允许我利用本地和远程端口转发 我希望利用它 但当我尝试设想如何
  • 如何 git reset --hard 子目录

    UPDATE 在 Git 2 23 2019 年 8 月 中 有一个新命令git restore这样做的 请参阅接受的答案 https stackoverflow com a 15404733 946850 UPDATE 从 Git 1 8
  • 如何防止 Git 对象被垃圾回收?

    据我了解 任何对象在没有任何对象时都会被垃圾收集refs 防止收集我们想要保留在数据库中的对象的最佳方法是什么 一个用例是 当在拉取请求中进行更改 可能根据代码审查 并且以前的提交变得分离时 它们不会合并到存储库中but它们应该始终可用 以
  • 用于从两台机器进行开发的 Git 存储库设置?

    我刚刚开始使用 git 对与 SVN 的工作流程差异印象深刻 但我遇到了一个结构 设置问题 文档似乎没有直观地解释如何设置 我想知道是否这甚至是可能的 我的设置是 我有几台计算机 台式机和笔记本电脑 进行开发 因此 为了更轻松地保持同步并为
  • 如何在git中返回到之前的版本

    我的工作站中有一个远程 git 存储库的签出副本 我不小心在本地进行了更改并推送到了远程 现在我想删除最后一次提交并返回到上一次提交 并且应将其推送到远程 如果这是带有提交消息的新提交 我没问题 怎么做 我建议不要用 force 推动另一种
  • git rebase -i --retain-empty-commits

    默认情况下 当您使用git rebase i它注释掉了空提交 我必须取消注释它们 它们对我有帮助 rebase 命令是否有一个选项可以防止这种我不想保留它们的不必要的假设 好吧 这比预期的要容易 git rebase i keep empt

随机推荐

  • 发布数据以同时创建相关的 Tastypie 资源?

    给定两个相关的 Django 模型A and B in a 一对多关系 模型 py class A models Model name models CharField max length 5 class B models Model n
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 如何让无限滚动发挥作用?

    我正在尝试让这个无限加载脚本在我的项目中工作 这是我的 HTML div div div class pagina div div class pagina div div class pagina div div class pagina
  • 动态前缀和

    是否有任何数据结构能够返回数组的前缀和 1 更新元素以及向数组插入 删除元素 所有这些都在 O log n 内 1 前缀和 是从第一个元素到给定索引的所有元素的总和 例如 给定非负整数数组8 1 10 7前三个元素的前缀和是19 8 1 1
  • 识别http链接并创建锚标记

    我正在尝试解析一些字符串 它嵌入了一些 http 链接 我想使用 jquery 在此字符串中动态创建锚标记 然后将它们显示在前端 以便用户可以单击它们 有没有办法做到这一点 Thanks 你可以这样做 function get the st
  • Jekyll + GitHub Pages 网站中的尾部斜杠导致 404

    我希望在我的网站上解析以下所有 URL 该网站是使用 Jekyll 构建并托管在 GitHub Pages 上的 https michaeledelstone com about https michaeledelstone com abo
  • 在 Perl 中查找标量变量的数据类型

    我有一个接受用户输入的函数 输入可以是整数 浮点数或字符串 我有三个重载函数 应该根据输入数据的数据类型调用它们 例如 如果用户输入一个整数 比如100 则应该调用具有整数参数的函数 如果用户输入字符串 例如 100 则应调用具有字符串参数
  • 如何在没有 OpenCv Manager 的情况下运行 OpenCV 代码

    我正在使用 OpenCV4Android 版本 2 4 10 并在 Samsung Galayx GT I9300 上测试我的代码 我遇到的问题是 我必须从 Play 商店下载 Opencv Manager 以便我的 opencv 代码运行
  • 将 str.contains 映射到 pandas DataFrame

    python 初学者 我正在寻找创建字符串的字典映射以及关联的值 我有一个数据框 想要创建一个新列 如果字符串匹配 则会将该列标记为 x df pd DataFrame comp dell notebook dell notebook S3
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 当元素具有多个类时如何在 switch 语句中检查 className

    在下面的示例中 我只想单击该选项以在警报中显示 我正在尝试使用 switch 语句来确定单击了哪个类 如果我的 div 不包含多个类 则我的示例将有效 我尝试使用classList contains在我的 switch 语句中无济于事 有没
  • 将远程存储库导入为具有完整历史记录的子目录

    我想将远程存储库作为具有完整历史记录的子目录进行合并和解耦 有多种方法和问题可以实现这一点 我的第一次尝试是使用subtree但它似乎没有重写文件的历史记录 所以我无法查看合并存储库的历史记录 接下来的尝试是手动合并它 就像 Seth Ro
  • 停止 xcode 建立索引

    我一直在使用 xCode 4 5 2 并且注意到 如果您正在建立索引 则需要停止一切并让它完成它的工作 否则您会陷入困境 这已经成为一个问题 因为项目很大 索引需要很长时间才能完成 而且会不断地完成 一个例子是它对整个项目建立了索引 在我对
  • 尝试重新打开已关闭的对象:sqlitequery

    所以本质上我查询数据库两次 我不明白这个错误真正来自哪里 因为我没有在任何地方关闭数据库 返回错误的代码是这样运行的 我查了一下 刚刚看到一个像我这样的案例 BeaconHandler pullAllDB new BeaconHandler
  • 获取每月第二个星期二的日期

    有没有办法使用 T SQL 语法找出每月第二个星期二的日期 例如 三月是十二号 四月是九号 您可以通过此方法查找 2013 年所有 第二个星期二 select dateadd day 8 datediff day 1 dateadd mon
  • 如何根据受保护的 String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText() ?

    我从 AsyncTask 中的数据库中获取数据 如果它为空 我想吐司一个警告文本 我在 AsyncTask 中尝试过 但我了解到它不是在工作线程中调用的 这是我的 doInBackground 方法 protected String doI
  • HTTP 接受“级别”?

    我一直在阅读HTTP 1 1 标头 http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 1在第 14 1 节 接受 的一些示例标头中 他们使用accept extension
  • 为什么我无法杀死 k8s pod 中的 python 进程?

    我试图杀死一个 python 进程 ps aux grep python root 1 12 6 2 1 2234740 1332316 Ssl 20 04 19 36 usr bin python3 batch run py root 4
  • 如何将 pandas DataFrame 转换为 TimeSeries?

    我正在寻找一种将 DataFrame 转换为 TimeSeries 而不拆分索引和值列的方法 有任何想法吗 谢谢 In 20 import pandas as pd In 21 import numpy as np In 22 dates
  • 如何为Git存储库组织和设置镜像备份服务器?

    我正在将一些 svn 存储库移至 Git 所以 我基本上尝试做的是 设置一台带有裸 Git 存储库的服务器 我将从中拉取和推送到该存储库 为第一台服务器上的所有存储库设置一些备份服务器 所以 假设我的服务器上有一个目录 例如 HOME gi