git备用文件中的多个路径?

时间:2017-11-05 01:51:13

标签: git

我怀疑这是不可能的,我已经做了大量的搜索,但没有找到任何关于它的信息,但我想我会问。

坚果壳 是否可以在git中的替换文件中设置多个路径?

长版本,我想要实现的目标 在我的鼻子上我有一个git服务器(gitblit),其中一个repos托管在那里我想在另一个位置保存一个解压缩副本而不会打扰由gitblit存储的repo,以保持开销低我用-s克隆了repo设置备用文件的选项。我用ssh登录到nas,所以所有路径都是local / volume1 / share / etc.大部分结账将发布板载脚本,所以这就是我想要的,但我有时想通过我的Windows PC上的共享看看回购,显然Windows没有线索/ volume1是什么。无论如何,在一个文件中设置多个备用文件或多个路径。这样Linux on on board有1条路径,windows访问可以通过nas的固定IP地址查找吗?

2 个答案:

答案 0 :(得分:1)

  

在坚果壳中是否可以在git中的替换文件中设置多个路径?

它在the documentation

中说得很对
  

对象/信息/交替

     
    此文件记录此对象库借用对象的备用对象库的路径,每行一个路径名。请注意,不仅本机Git工具在本地使用它,而且HTTP提取器也尝试远程使用它;如果您在替换文件中有相对路径(相对于对象数据库,而不是存储库!),这通常会起作用,但如果您使用绝对路径它将无法工作,除非文件系统和Web URL中的绝对路径相同。另请参阅 objects / info / http-alternates

答案 1 :(得分:1)

请注意,使用Git 2.21(2019年第一季度,一年多以后):

  • 将“ alternate_object_database”重命名为“ object_directory
  • 备用路径的处理方式与主对象目录相同。

请参见commit 7317aa7(2018年11月22日)以及commit 97b2fa0commit 61c7711commit 3a2e082commit f0eaf63commit f3f043a,{{3} },commit b69fb86commit 263db40commit b2ac148(2018年11月12日)由commit 4d0984b
(由Jeff King (peff)Junio C Hamano -- gitster --中合并,2019年1月4日)

  

将“ alternate_object_database”重命名为“ object_directory”

     

在准备统一alt odb和常规回购对象目录的处理时,让我们使用一个更中性的名称。
  此修补程序是纯机械的,交换类型名称,并将任何名为“ alt”的变量转换为“ odb”。应该没有功能上的变化,但是它将减少后续差异中的噪声。

并且:

  

句柄替换与主对象目录相同的路径

     

当我们为主对象目录生成松散的文件路径时,调用方将为loose_object_path(以前为sha1_file_name)提供一个缓冲区。
  调用方通常会保留自己的静态缓冲区,以避免过多的重新分配。

     

但是对于备用目录,每个结构都带有自己的暂存缓冲区。这是不必要的不​​同;让我们统一它们。

     

我们可以在这两个方向上进行选择,但是此补丁将替代结构移至主目录样式(而不是相反)。

     

从技术上讲,替代样式更有效,因为它避免了在每次调用时重写对象目录名称。
  但这在实践中不太重要,因为我们避免了两种方式的重新分配(而且没有人注意到或抱怨主对象目录正在复制)   在进行更昂贵的系统调用之前需要几个额外的字节。


这对在管理路径上管理那些松散的对象有影响:

  

sha1-file:使用松散的对象缓存进行快速存在性检查

     

如果我们希望向has_sha1_file()询问我们不太可能拥有的许多对象(例如,在获取协商期间),我们已经使用OBJECT_INFO_QUICK牺牲了准确性(由于竞速) (同时写入或重新打包)以提高速度(我们避免重新扫描pack目录)。

     

但是,即使检查是否有松散的物体也可能很昂贵,因为我们将stat()每个都这样做。在许多系统上,此开销不太明显,但是stat()在某些操作系统上或由于网络文件系统而特别慢。

     

由于QUICK标志已经告诉我们可以稍作陈旧,所以我们可以以此为线索来查看每个对象目录的内存缓存。基本上,就用内存中的二进制搜索来代替stat()调用。

     

请注意,这实际上可能会更慢。我们将用完整的readdir()来填充缓存,因此,如果您有大量的松散对象和少量的查找,则readdir()可能会变得更加昂贵。

     

实际上这没什么大不了的。
  如果您有大量可到达的松散对象,那么您将遇到性能问题(应通过重新包装来解决)。
  您可能有无法访问的对象,否则它们不会影响性能。通常,这些操作会通过“ git gc”修剪步骤而消失,但是在默认配置下,它们最多可以保留2周。

     

因此,这取决于您可能合理地希望拥有多少个此类对象,N条目上的readdir()与M stat()调用相比要慢多少(在这里,我们真的很在乎系统调用支持readdir(),就像Linux上的getdents()一样,但我在下面仅将其称为readdir()

     
      
  • 如果NM(典型的打包存储库)小得多,我们就知道这是一个大胜利(很少有readdirs()紧随其后使用许多结果缓存)。
  •   
  • NM的大小相似时,这也是胜利。
      我们关心进行系统调用的延迟,readdir()应该在单个调用中为我们提供许多值。多少?
  •   
     

在Linux上,运行“ strace -e getdents ls”显示一个32k缓冲区获得512   每个调用的条目数(每个条目64个字节;名称本身为38   个字节,再加上其他一些字段)。
  因此,我们可以想象,只要存储库中的松散对象数量比您进行的查找数量少500倍,这总是一个胜利。

     

很难对此进行自动调整,因为我们通常不预先知道我们要进行多少次查找。但这不太可能取得显著成效   更糟。