場景說明
- 我不想checkout到覆蓋本地工作區(qū)的文件,
而是想把該 - 版本checkout到另外一個文件夾下,檢出看看,這個文件夾不被git管理
方案一:git archive 最簡單省事
# `git archive` 創(chuàng)建對應(yīng)版本 當(dāng)前目錄下的文件為一個tar文件
# `tar -x -C` 加壓文件到指定位置
git archive <commit_hash> | tar -x -C <new_folder>
將 <commit_hash> 替換為你想要檢出的具體commit的哈希值,<new_folder> 替換為你想要保存文件的新文件夾路徑。
這條命令會創(chuàng)建一個對應(yīng)版本的tar臨時歸檔文件,并將其解壓到指定的新文件夾中,保持原來的文件結(jié)構(gòu)。
注意:
- 執(zhí)行這條命令應(yīng)在git倉庫的根目錄下,否則得到的只有當(dāng)前目錄下的文件
- 你需要確保 <new_folder> 不存在,或者是一個空文件夾,否則會報錯。
如果打包時不想對某些文件/文件夾打包,可以創(chuàng)建一個.gitattributes文件(但是只有含有這個文件的commit,打包時才能忽略,對歷史版本打包時無效),并在其中添加export-ignore
屬性,比如:
# 這三個東西打包時將被忽略
.gitignore export-ignore
.gitattributes export-ignore
/result export-ignore
方案二:git show 最靈活, 但文件較多時麻煩
另一個方案是利用git show
結(jié)合重定向>
逐個檢出文件,比如:git show 94119e2:test.py > test_v1.0.py
,有多個文件的話就逐個執(zhí)行。文章來源:http://www.zghlxwxcb.cn/news/detail-717201.html
方案三:git --work-tree 有bug
方案:通過指定--work-tree=/path/to/dist 可實現(xiàn)目標功能
git --work-tree=/d/mycode/test_git/labs/2053 checkout 3d9862a -- .
其中:
? git checkout 3d9862a -- .
○ 檢出指定版本的所有文件
○ `.`表示所有文件, 也可以換成某個文件/文件夾
? --work-tree=/d/mycode/test_git/labs/2053
○ 用于指定檢出到的位置,該路徑必須存在
○ 如果該路徑下已有文件,則會直接覆蓋
執(zhí)行這個命令之后會把你的文件變成not staged for commit, 然后執(zhí)行git add
就可以了,不需要再commit.文章來源地址http://www.zghlxwxcb.cn/news/detail-717201.html
到了這里,關(guān)于Git checkout 某個版本到指定文件夾下的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!