不得不將代碼(整個項目歷史)轉移到另一個開發商店,並且想知道是否將我們的團隊用於協作的裸露git存儲庫進行壓縮並將其逐字逐句發送是一個好主意?將`git`存儲庫壓縮並將其交給其他人是否安全?
這樣做是否安全?
在.git文件夾中是否存儲有敏感數據?
不得不將代碼(整個項目歷史)轉移到另一個開發商店,並且想知道是否將我們的團隊用於協作的裸露git存儲庫進行壓縮並將其逐字逐句發送是一個好主意?將`git`存儲庫壓縮並將其交給其他人是否安全?
這樣做是否安全?
在.git文件夾中是否存儲有敏感數據?
如果你這樣做,而不是使用clone
或bundle
那麼您還可以給他們你的.git/hooks
目錄,.git/config
文件和其他一些自定義的文件。這些文件不包含任何敏感數據(您會知道,因爲您可能已經手動將其放入),但它們可能包含個性化設置。例如,您可能在.git/config
中設置了user.name
和user.email
配置設置。你可能寫了一些鉤子腳本(在.git/hooks/*
)可能包含密碼 - 但是,就像我說過的,你可能已經知道了。
但是,git不會存儲您的任何密碼或任何其他祕密/敏感數據。
一個類似的解決方案是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
。
我意識到我的包含一些遠程回購地址,我實際上必須把我的[email protected]
他們的工作。因此,您不應該包含任何本地元數據(如.git/config
),因爲它們本意是......。
看一下你的.git
目錄。可能有很多文件,但它們屬於相當少量的常規組(對象存儲數據,refs,reflog等)。您可以將內容分爲兩大類:Git可能通常傳輸到其他存儲庫的數據以及Git通常不會傳輸到其他存儲庫的數據。
不能正常運:
HEAD
,FETCH_HEAD
,ORIG_HEAD
,MERGE_HEAD
config
description
hooks/
index
info/
- 雜logs/
- reflogs通常輸送(例如通過克隆,提取,推,和束):
objects/
packed-refs
refs/
這最後一組構成了對象存儲和其公佈的入口點。您顯然必須檢查版本化內容本身,以確定是否有任何敏感內容。
HEADs,index
(不在裸倉庫中)以及推薦日誌(logs/
)都是對象庫中的附加入口點。如果你已經做了任何歷史重寫(例如,你最近從記錄的歷史記錄中刪除了一些敏感的配置文件),你會特別注意reflog(可能沒有在大多數裸存儲庫上啓用)和refs/original/refs部分命名空間。
FETCH_HEAD
和config
可能具有相關Git存儲庫的地址。
config
可能有其他敏感信息。
info/
有各種各樣的信息;其中一些可能是敏感的(信息/替代);有些不太可能是敏感的(假設內容本身是「乾淨的」-info/refs,info/packs);有些可能對儲存庫的操作很重要(信息/移植)。您使用的任何附加工具(鉤子腳本,Web界面等)都可能在這裏存儲數據;其中一些可能是敏感的(訪問控制列表等)。
如果在hooks/
中有任何活動,您需要評估是否應該提供存儲庫的副本(還要檢查它是否存儲了存儲庫中任何位置的任何額外數據)。
description
文件可能是無害的,但你可以檢查它。
如果你只移交的內容,那麼你或許應該只克隆到一個新的純倉庫或使用束(git bundle爲VonC describes)。
如果您負責切換內容以及用於管理它的過程,那麼您將不得不單獨調查存儲庫中的每一位。
一般(或更多的「偏執狂」的方式),有一個Git倉庫的層次裏面很多地方有人可以存儲任何隨機文件。如果你想確保你只提供Git需要的數據,你應該使用克隆或捆綁包。如果您需要提供一些「每個存儲庫」數據(例如,用於管理存儲庫的某個掛鉤),則應克隆到新的裸存儲庫(使用file:
URL避免複製和硬連接現有對象存儲庫文件)並重新安裝只有履行你的義務所需的鉤子/數據。
不錯 - 很多很好的細節。 – 2010-09-17 06:26:24
像這位先生說的,很多細節。 +1 – VonC 2010-09-17 21:19:26
對! '.git/config'文件可能很敏感。 +1 – VonC 2010-09-17 04:08:23