0


Git checkout 某个版本到指定文件夹下

文章目录

场景说明

  • 我不想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

,有多个文件的话就逐个执行。

方案三:

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.

标签: git

本文转载自: https://blog.csdn.net/weixin_44220976/article/details/132369242
版权归原作者 Y Shy 所有, 如有侵权,请联系我们删除。

“Git checkout 某个版本到指定文件夹下”的评论:

还没有评论