今天必须将代码(整个项目历史)转移到另一个开发商店,并且想知道拉出我们团队用于协作的裸git存储库是否是一个好主意,并且只是逐字发送?
这样做是否安全?
是否有任何敏感数据存储在.git文件夹中?
答案 0 :(得分:11)
如果您这样做而不是使用clone
或bundle
,那么您还将向他们提供您的.git/hooks
目录,.git/config
文件和其他一些可自定义的文件。这些文件包含任何敏感数据并不常见(您知道因为手动将它放在那里),但它们可能包含个性化设置。例如,您可能在user.name
中设置了user.email
和.git/config
配置设置。您可能已经编写了一些可能包含密码的钩子脚本(在.git/hooks/*
中) - 但是,就像我说的那样,您可能已经知道了。
但是,git不存储您的任何密码或任何其他秘密/敏感数据。
答案 1 :(得分:7)
查看.git
目录。可能有很多文件,但它们属于相当少量的常规组(对象存储数据,引用,reflog等)。您可以将内容分为两大类:Git通常可以传输到其他存储库的数据和Git通常不会传输到其他存储库的数据。
通常没有运输:
HEAD
,FETCH_HEAD
,ORIG_HEAD
,MERGE_HEAD
config
description
hooks/
index
info/
- 其他logs/
- reflogs 正常运输(例如通过克隆,提取,推送和捆绑):
objects/
packed-refs
refs/
最后一组构成了对象存储及其已发布的入口点。您显然必须查看版本化内容本身以确定其中是否存在任何敏感内容。
HEAD,index
(不存在于裸存储库中)和reflog(logs/
)都是对象存储的附加入口点。如果您已完成任何历史记录重写(例如,您最近从记录的历史记录中删除了一些敏感配置文件),您将需要特别注意reflog(可能未在大多数裸存储库上启用)和refs / original / part of refs命名空间。
FETCH_HEAD
和config
可能包含相关Git存储库的地址。
config
可能还有其他敏感信息。
info/
有各种各样的信息;其中一些可能是敏感的(信息/替代);有些人不太敏感(假设内容本身是“干净的”-info / refs,info / packs);一些可能对存储库(信息/移植)的操作很重要。您正在使用的任何附加工具(钩子脚本,Web界面等)可能在此处存储数据;其中一些可能是敏感的(访问控制列表等)。
如果hooks/
中有任何活动,您将需要评估是否应该提供存储库副本(还要检查它是否在存储库中的任何位置存储任何额外数据)。
description
文件可能无害,但您也可以查看它。
如果您只是传递内容,那么您应该只是克隆到一个新的裸存储库或使用一个包(git bundle为VonC describes)。
如果您负责切换内容以及用于管理内容的过程,那么您将需要单独调查存储库的每个位。
一般情况下(或者更“偏执”的方式),Git存储库的层次结构中有许多地方,有人可以存储任何随机文件。如果你想确定你只是赠送Git需要的数据,你应该使用克隆或包。如果您需要提供一些“每个存储库”数据(例如,用于管理存储库的一些钩子),那么您应该克隆到新的裸存储库(使用file:
URL以避免复制和硬链接现有对象存储文件)并仅重新安装履行义务所需的挂钩/数据。
答案 2 :(得分:4)
一个类似的解决方案是git bundle
。
有关详情,请参阅Backup of github repo或Backup a Local Git Repository。
.git
(捆绑的或压缩的)将不包含任何敏感数据,除了您放入的所有历史记录和文件。
有关删除敏感数据的信息,请参阅git - remove file from the repository。
在Pat Notz中提及his answer时,压缩的.git
将包含您的.git/config
。
我意识到我的包含一些远程仓库地址,我实际上必须让我的login@password
让他们工作。因此,您不应该包含任何本地元数据(例如.git/config
),因为它们应该是......本地的。