[英]Git -- cloning a previous commit in a different folder than local working directory
在我的本地机器上,我有一个文件夹结构:
c:\myprojects\project1\
c:\myprojects\project2\
这是 git 远程提交/推送到名为myprojects
的存储库
我的机器上有一个不受源代码控制的文件夹。 这是
c:\temp_outside_of_source_control\
假设存储库(在线和本地)具有以下按时间倒序提交的历史记录 (SHAID):
abcdef #<---- current upto date one
ghijkl #<---- older commit
如何下载/克隆/repo 将ghijkl
提交到c:\temp_outside_of_source_control\
而不会以任何方式影响/触及本地c:\myprojects\
和远程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。
(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
之间存在的关系。
(3) 从c:\temp_outside_of_source_control\
里面,我跑了
git clone ghijkl
这不起作用:
fatal: repository 'ghijkl' does not exist
您混淆了克隆/存储库和提交。 你的命令
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.