场景说明
- 我不想checkout到覆盖本地工作区的文件,
而是想把该 - 版本checkout到另外一个文件夹下,检出看看,这个文件夹不被git管理
方案一:git archive 最简单省事
# `git archive` 创建对应版本 当前目录下的文件为一个tar文件
# `tar -x -C` 加压文件到指定位置
git archive <commit_hash> | tar -x -C <new_folder>
将 <commit_hash> 替换为你想要检出的具体commit的哈希值,<new_folder> 替换为你想要保存文件的新文件夹路径。
这条命令会创建一个对应版本的tar临时归档文件,并将其解压到指定的新文件夹中,保持原来的文件结构。
注意:
- 执行这条命令应在git仓库的根目录下,否则得到的只有当前目录下的文件
- 你需要确保 <new_folder> 不存在,或者是一个空文件夹,否则会报错。
如果打包时不想对某些文件/文件夹打包,可以创建一个.gitattributes文件(但是只有含有这个文件的commit,打包时才能忽略,对历史版本打包时无效),并在其中添加export-ignore
属性,比如:
# 这三个东西打包时将被忽略
.gitignore export-ignore
.gitattributes export-ignore
/result export-ignore
方案二:git show 最灵活, 但文件较多时麻烦
另一个方案是利用git show
结合重定向>
逐个检出文件,比如:git show 94119e2:test.py > test_v1.0.py
,有多个文件的话就逐个执行。文章来源:https://www.toymoban.com/news/detail-717201.html
方案三:git --work-tree 有bug
方案:通过指定--work-tree=/path/to/dist 可实现目标功能
git --work-tree=/d/mycode/test_git/labs/2053 checkout 3d9862a -- .
其中:
• git checkout 3d9862a -- .
○ 检出指定版本的所有文件
○ `.`表示所有文件, 也可以换成某个文件/文件夹
• --work-tree=/d/mycode/test_git/labs/2053
○ 用于指定检出到的位置,该路径必须存在
○ 如果该路径下已有文件,则会直接覆盖
执行这个命令之后会把你的文件变成not staged for commit, 然后执行git add
就可以了,不需要再commit.文章来源地址https://www.toymoban.com/news/detail-717201.html
到了这里,关于Git checkout 某个版本到指定文件夹下的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!