亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能從淺層克隆中推出?

為什么我不能從淺層克隆中推出?

Git
忽然笑 2019-09-16 12:00:15
為什么我不能從淺層克隆中推出?該git clone --depth命令選項說--depth <depth> Create a shallow clone with a history truncated to the specified number of revisions. A shallow repository has a number of limitations (you cannot clone or fetch from it, nor push from nor into it),  but is adequate if you are only interested in the recent history of a large project with a long history,  and would want to send in fixes as patches.為什么淺克隆有這種限制?為什么它只是一個補丁工作流程?對于某些項目工作流程,我需要將最新的提交從單個分支傳遞給編碼器,然后讓它們能夠push(快進)開發到主服務器。這部分是為了安全,知識產權保護和回購規模,部分是為了減少大回購會給天真編碼員帶來的困惑。是否有允許這樣的git工作流程?更新:根據Karl Bielefeldt的回答,git checkout --orphan應該是正確的答案。但是仍然需要將該分支單獨“克隆”給新用戶,并且能夠有效地推送它。手冊頁指出:git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] --orphan創建一個名為<new_branch>,啟動 <start_point> 并切換到它的新孤立分支。在這個新分支上進行的第一次提交將沒有父項,它將成為與所有其他分支和提交完全斷開的新歷史的根。調整索引和工作樹,就像之前運行一樣git checkout <start_point>。這允許您啟動一個新的歷史記錄,記錄一組類似于<start_point>通過輕松運行git  commit -a以進行根提交的路徑。當您想要從提交中發布樹而不公開其完整歷史記錄時,這可能很有用。您可能希望這樣做以發布項目的開源分支,該項目的當前樹是“干凈的”,但其完整歷史記錄包含專有或其他受阻的代碼。如果要啟動記錄一組完全不同的路徑的斷開連接的歷史記錄<start_point>,則應通過git rm -rf .從工作樹的頂層運行創建孤立分支后立即清除索引和工作樹。之后,您將準備好準備新文件,重新填充工作樹,從其他地方復制它們,提取tarball等。VonC與Junio評論的鏈接很有意思。我認為手冊應該在這種情況下提供指導,并允許正確的命令[例如clone <branch> --options]只提取回購的相關部分。顯然,push通過在歷史記錄底部設置一些鏈接提交和SHA1來鎖定repo匹配,可以提高成功的可能性。更新Git 1.9.0:發布說明2014年2月14日?!皬囊郧氨唤沟臏\克隆存儲庫中獲取,主要是因為所涉及的代碼路徑沒有經過仔細審查,我們也沒有打擾支持這種用法。這個版本試圖允許以更加可控的方式從一個淺層克隆的存儲庫中轉移對象(即接收器變成了一個截斷歷史的淺存儲庫)?!斑@對淺層克隆人來說是個好消息。接下來 - 可能是狹窄的克隆。
查看完整描述

2 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

正如Junio C. Hamano(主要的Git維護者)所說

不是規則或多或少像:

如果您的淺存儲庫的歷史記錄延伸時間不夠長而另一個存儲庫在截斷的歷史記錄之前分叉,那么您無法計算共同的祖先并且無法推出。

更新2014:請參閱“ git clone --depth 1(淺層克隆)是否比它更有用? ”:Git 1.9將解除限制!

2015年更新:使用Git 2.5+,您甚至可以獲取單個提交。請參閱“ 從遠程git存儲庫中提取特定提交 ”


原始答案(2011年8月):

實際上,想到它,它比“無法計算共同點”強大得多。

歷史可能如下所示:

          R---R---R
         /
  --R---R---X---X---S---S---S

這里S是你在淺水庫有提交,R是存在于接收推式資源庫中的提交。
由于您的歷史記錄很淺,因此兩個存儲庫都沒有“ X為了保持收件人存儲庫的歷史記錄完整而需要存在的提交”; 接收者并不淺薄,我們不想讓它變淺。

如果你前一段時間淺克隆,沒有工作,而另一側的進展與對方溝通,及如果對方的進展包括:倒帶和歷史的重建,你會看到一個類似的拓撲結構。當您淺深地克隆深度為1時,上圖中
最左邊的' S'可能是分支的尖端,從那時起,遠程端可能已經丟棄了最前面的三個提交,并重建了它導致最右邊' R'的歷史。
在這種情況下,推送到遙控器HEAD將失敗。


所以它可以在某些情況下工作,但它不受支持:

如果我要對此說些什么......

  • 我認為“不支持”是提供足夠信息的簡潔方法,但它只適用于聰明人。

  • 不是每個人都聰明; 有些人自己嘗試一下,看到這個操作似乎適用于他們有限數量的試驗,并且可以得出結論它大部分時間都可以工作。
    他們祝賀自己的情報“大部分時間”,而非“永遠”。
    當他們看到它不起作用時,他們會感到不安,即使他們已被警告過。


有關淺層克隆更新過程的更多信息,請參閱“ 如何更新git淺層克隆? ”。



查看完整回答
反對 回復 2019-09-16
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

是否有允許這樣的git工作流程?

是的,它是作為補丁發送補丁。 git format-patch是專門為此而設計的。如果你想谷歌了解更多細節,它被稱為“看門人”工作流程。很難相信一個組織關注“安全和知識產權保護”,因為你的組織還沒有使用類似的東西,一個人或一個小組負責審查“不受信任”的變化,然后再進入真正的構建。


根據您的評論,我現在可以更好地了解您的要求。我建議你創建一個孤兒分支(參見git checkout --orphan),從你希望你的開發者開始。僅將該分支克隆到這些開發人員可訪問的不同存儲庫,并讓它們從該存儲庫正??寺?,推送和拉取。

然后,當你需要將他們的更改重新集成到官方受保護的存儲庫時,只需拉動他們的分支,制作它的副本,git branch這樣你就不會覆蓋原來的孤兒(如果你想稍后重復這個過程),那么重新復制副本到您的原始分支點,并合并或正常的任何。歷史將看起來像他們直接從您的受保護倉庫工作。

它比平常更復雜,但這是額外隔離的代價。



查看完整回答
反對 回復 2019-09-16
  • 2 回答
  • 0 關注
  • 616 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號