繁体   English   中英

Git -- 将先前的提交克隆到与本地工作目录不同的文件夹中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM