在我的本地機器上,我有一個檔案夾結構:
c:\myprojects\project1\
c:\myprojects\project2\
這已被 git 提交/遠程推送到名為 myprojects
我的機器上有一個不受源代碼控制的檔案夾。這是
c:\temp_outside_of_source_control\
假設存盤庫(在線和本地)具有以下按時間倒序提交的歷史記錄 (SHAID):
abcdef #<---- current upto date one
ghijkl #<---- older commit
如何ghijkl在c:\temp_outside_of_source_control\不以任何方式影響/觸及本地c:\myprojects\和遠程之間存在的關系的情況下下載/克隆/repo 提交myprojects?
我試過的:
(1) 從里面c:\temp_outside_of_source_control\,我跑了
git clone url_path_to_myprojects_repository
這創造了
c:\temp_outside_of_source_control\myprojects\project1\
c:\temp_outside_of_source_control\myprojects\project2\
并且這個檔案夾的內容是最新的——即它們是提交 abcdef。但是,這有一個不幸的副作用,即這會影響c:\myprojects\.git\檔案夾的內容。我希望我的在線存盤庫和本地存盤庫之間的當前關系完全保持不變。本質上,我希望將較早的提交復制到非源代碼控制檔案夾中,而不會以任何方式影響本地源代碼控制檔案夾與在線存盤庫之間的當前關系。
(2)從一個顯示提交歷史的git軟體(VSCode中的Git Graph,如果重要的話),我右鍵單擊提交ghijkl并按下checkout...,希望它會詢問我想在本地查看哪個檔案夾,但沒有這樣的選擇。有一個警告:
Are you sure you want to checkout commit ghijkl? This will result in a detached HEAD state.這可能會影響c:\myprojects\與在線存盤庫之間存在的關系myprojects。
ETA:正如用戶 knittl 在答案中所建議的那樣,我能夠壓縮先前提交的內容而不會影響其他內容,并通過以下方式在本地下載:
git archive --format zip --output previous_commit.zip ghijkl
但是,我仍然想知道是否有一種方法可以直接將先前的提交復制到不受源代碼控制的用戶指定檔案夾,而不會“擾亂”在線存盤庫和源代碼控制檔案夾之間的當前關系。
ETA2:確實,knittl 建議的方法非常適合我在 ubuntu/wsl 上的目的:
git archive ghijkl | tar -xC temp_outside_source_control
uj5u.com熱心網友回復:
您混淆了克隆/存盤庫和提交。你的命令
git clone url_path_to_myprojects_repository
只差一步:
git checkout ghijkl
這將使您獲得較舊的提交。git clone接受存盤庫的 URL 并下載存盤庫的完整歷史記錄并默認檢查默認分支的最新提交。git checkout通常需要提交,并使磁盤上的作業樹與本地存盤庫中的給定提交相匹配。較新的switch子命令也是如此。
也就是說,如果您對歷史完全不感興趣,您可以輕松地從任何樹狀結構(例如提交)創建存檔:
cd url_path_to_myprojects_repository
git archive -o source.tar ghijkl
甚至可能,取決于您的遠程存盤庫配置:
git archive -o source.tar --remote=url_of_origin_repository ghijkl
稍后,您可以將存檔解壓縮到您希望的任何目錄中。也可以立即提取存檔,而無需將檔案寫入磁盤:
git archive ghijkl | tar -xC temp_outside_source_control
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409105.html
標籤:
