压缩裸`git`存储库并将其交给其他人是否安全?

时间:2010-09-16 22:09:40

标签: git

今天必须将代码(整个项目历史)转移到另一个开发商店,并且想知道拉出我们团队用于协作的裸git存储库是否是一个好主意,并且只是逐字发送?

这样做是否安全?
是否有任何敏感数据存储在.git文件夹中?

3 个答案:

答案 0 :(得分:11)

如果您这样做而不是使用clonebundle,那么您还将向他们提供您的.git/hooks目录,.git/config文件和其他一些可自定义的文件。这些文件包含任何敏感数据并不常见(您知道因为手动将它放在那里),但它们可能包含个性化设置。例如,您可能在user.name中设置了user.email.git/config配置设置。您可能已经编写了一些可能包含密码的钩子脚本(在.git/hooks/*中) - 但是,就像我说的那样,您可能已经知道了。

但是,git不存储您的任何密码或任何其他秘密/敏感数据。

答案 1 :(得分:7)

查看.git目录。可能有很多文件,但它们属于相当少量的常规组(对象存储数据,引用,reflog等)。您可以将内容分为两大类:Git通常可以传输到其他存储库的数据和Git通常不会传输到其他存储库的数据。

通常没有运输:

  • HEADFETCH_HEADORIG_HEADMERGE_HEAD
  • config
  • description
  • hooks/
  • index
  • info/ - 其他
  • logs/ - reflogs

正常运输(例如通过克隆,提取,推送和捆绑):

  • objects/
  • packed-refs
  • refs/

最后一组构成了对象存储及其已发布的入口点。您显然必须查看版本化内容本身以确定其中是否存在任何敏感内容。

HEAD,index(不存在于裸存储库中)和reflog(logs/)都是对象存储的附加入口点。如果您已完成任何历史记录重写(例如,您最近从记录的历史记录中删除了一些敏感配置文件),您将需要特别注意reflog(可能未在大多数裸存储库上启用)和refs / original / part of refs命名空间。

FETCH_HEADconfig可能包含相关Git存储库的地址。

config可能还有其他敏感信息。

info/有各种各样的信息;其中一些可能是敏感的(信息/替代);有些人不太敏感(假设内容本身是“干净的”-info / refs,info / packs);一些可能对存储库(信息/移植)的操作很重要。您正在使用的任何附加工具(钩子脚本,Web界面等)可能在此处存储数据;其中一些可能是敏感的(访问控制列表等)。

如果hooks/中有任何活动,您将需要评估是否应该提供存储库副本(还要检查它是否在存储库中的任何位置存储任何额外数据)。

description文件可能无害,但您也可以查看它。


如果您只是传递内容,那么您应该只是克隆到一个新的裸存储库或使用一个包(git bundleVonC describes)。

如果您负责切换内容以及用于管理内容的过程,那么您将需要单独调查存储库的每个位。


一般情况下(或者更“偏执”的方式),Git存储库的层次结构中有许多地方,有人可以存储任何随机文件。如果你想确定你只是赠送Git需要的数据,你应该使用克隆或包。如果您需要提供一些“每个存储库”数据(例如,用于管理存储库的一些钩子),那么您应该克隆到新的裸存储库(使用file: URL以避免复制和硬链接现有对象存储文件)并仅重新安装履行义务所需的挂钩/数据。

答案 2 :(得分:4)

一个类似的解决方案是git bundle

有关详情,请参阅Backup of github repoBackup a Local Git Repository

.git(捆绑的或压缩的)将不包含任何敏感数据,除了您放入的所有历史记录和文件。
有关删除敏感数据的信息,请参阅git - remove file from the repository

Pat Notz中提及his answer时,压缩的.git将包含您的.git/config
我意识到我的包含一些远程仓库地址,我实际上必须让我的login@password让他们工作。因此,您不应该包含任何本地元数据(例如.git/config),因为它们应该是......本地的。