当前位置: 首页 > 面试题库 >

在服务器上对Git分支进行重复数据删除

杨慎之
2023-03-14
问题内容

有没有一种方法可以硬链接包含多个Git存储库的文件夹中的所有重复对象?

说明:

我在公司服务器(Linux计算机)上托管了一个Git服务器。这个想法是拥有一个主规范存储库,每个用户都没有推送访问权限,但是每个用户都派生规范存储库(将规范存储库克隆到用户的主目录,从而实际上创建硬链接)。

/ canonical / Repo / Dev1 / Repo(最初克隆时硬链接到/ canonical / Repo的对象)/ Dev2 /
Repo(最初克隆时硬链接到/ canonical / Repo的对象)

这一切都很好。在以下情况下会出现问题:

Dev1:在服务器(/ Dev1 /
Repo)上将大量提交推送到他的fork上Dev2:在他的本地系统上获取该提交,进行自己的更改并将其推送到他在服务器(/ Dev2 /
Repo)上自己的fork

(现在,相同的“巨大”文件位于服务器上开发人员的两个分支中。它不会自动创建硬链接。)

这真是疯狂地吞噬了我的服务器空间!

我该如何在两个分支之间重复的对象之间创建硬链接,或者在该问题上是规范的,以便节省服务器空间,并且每个开发人员从其本地计算机上的他/她的分支中克隆时都将获取所有数据?


问题答案:

我决定这样做:

 shared-objects-database.git/
foo.git/
  objects/info/alternate (will have ../../shared-objects-database.git/objects)
bar.git/
  objects/info/alternate (will have ../../shared-objects-database.git/objects)
baz.git/
  objects/info/alternate (will have ../../shared-objects-database.git/objects)

所有分叉在其object / info / alternates文件中都有一个条目,该条目提供了到对象数据库存储库的相对路径。

使对象数据库成为存储库非常重要,因为我们可以保存具有相同名称的存储库的不同用户的对象和引用。

脚步:

  1. git init --bare shared-object-database.git
  2. 每当有任何推送(通过后接收)或运行cronjob时,我都会运行以下代码行
    for r in list-of-forks
    do
    

(cd“ $ r” && git push ../shared-objects-database.git“ refs / :refs / remotes
/ $ r /
” && echo ../../shared-objects-database.git / objects>对象/ info /
alternates#要保存的代码每次完成时,我都将“ fat”对象添加到备用对象中

然后,在下一个“ git gc”中,将替代已存在的fork中的所有对象。

git repack -adl 也是一个选择!

这样,我们可以节省空间,以便两个用户在服务器上各自的分支上推送相同的数据将共享对象。

我们需要在共享对象数据库中将gc.pruneExpire变量设置为never。为了安全起见!

要偶尔修剪对象,请将所有派生作为远程对象添加到共享,提取和修剪中!Git会做剩下的!



 类似资料:
  • 现在我们将讨论如何在你自己的服务器上搭建 Git 服务来运行这些协议。 Note 这里我们将要演示在 Linux 服务器上进行一次基本且简化的安装所需的命令与步骤,当然在 Mac 或 Windows 服务器上同样可以运行这些服务。 事实上,在你的计算机基础架构中建立一个生产环境服务器,将不可避免的使用到不同的安全措施与操作系统工具。但是,希望你能从本节中获得一些必要的知识。 在开始架设 Git 服

  • 当EXCEL服务器数据规范越来越多的时候,为了方便管理,有必要对数据规范进行分类,如下图所示: 对 列表窗体选择 数据规范分成3大类,分别是“客户”、“商品”和“省份”,如何实现的呢?如下所示: 只要在这里直接输入当前数据规范的所属分类的名字即可,系统会自动根据所属分类的名字自动进行归类。

  • 接下来我们将通过 “Git” 协议建立一个基于守护进程的仓库。 对于快速且无需授权的 Git 数据访问,这是一个理想之选。 请注意,因为其不包含授权服务,任何通过该协议管理的内容将在其网络上公开。 如果运行在防火墙之外的服务器上,它应该只对那些公开的只读项目服务。 如果运行在防火墙之内的服务器上,它可用于支撑大量参与人员或自动系统(用于持续集成或编译的主机)只读访问的项目,这样可以省去逐一配置 S

  • 我想按多个列对熊猫数据框进行分组。每个Row都有一个整数、一个Name和一个额外的数值。我希望最终的Dataframe包含Name具有最高整数的每一行。 通过分组数据帧,只有第0行应该消失。第3行和第4行仍应包括在数据框中。

  • 现在我们将讨论如何在你自己的服务器上搭建 Git 服务来运行这些协议。 Note:这里我们将要演示在 Linux 服务器上进行一次基本且简化的安装所需的命令与步骤,当然在 Mac 或 Windows 服务器上同样可以运行这些服务。 事实上,在你的计算机基础架构中建立一个生产环境服务器,将不可避免的使用到不同的安全措施与操作系统工具。但是,希望你能从本节中获得一些必要的知识。 在开始架设 Git 服

  • 我们来看看如何配置服务器端的 SSH 访问。 本例中,我们将使用 authorized_keys 方法来对用户进行认证。 同时我们假设你使用的操作系统是标准的 Linux 发行版,比如 Ubuntu。 首先,创建一个操作系统用户 git,并为其建立一个 .ssh 目录。 $ sudo adduser git $ su git $ cd $ mkdir .ssh && chmod 700 .ssh