如何从git中进行检出

4
到目前为止,作为项目中唯一的人员,我一直在复制/粘贴我的项目文件夹并将它们重命名(Ver1、Ver2、Ver3等)作为版本控制方案。现在我正在尝试切换到Git。
这是我所做的:
我初始化了一个.git文件夹,并将第一个版本添加到Git仓库中。然后,我将所有其他版本作为提交添加到Git仓库,并对它们进行了标记。因此,现在我在主分支和标签中拥有所有版本。
我的问题是:
如何从Git仓库中获取任何版本并将其放入任意文件夹中,而不必切换分支(或者Git可能认为需要执行的任何其他操作)?只需将Git中的任何版本简单地复制到文件夹中,而不涉及Git仓库和文件夹之间的任何连接?
3个回答

2
通常情况下,您可以直接在常规工作树中检查历史版本(您可以将任何提交检出为“分离的 HEAD”/“未命名分支”),或者间接地使用 git log(特别是 -p 选项)、git blame 等查看历史记录。
但是,如果您确实需要完全解压旧版本,您可以使用 git archive 命令创建特定提交的 tar 存档文件1(标签名称、分支名称(将获取其最新提交)、提交对象 ID(即 SHA-1 哈希值)都可以用于指定提交)。您可以轻松地将存档文件传输到 tar 中,以在任何位置提取它。
从您的存储库目录开始:
git archive --format=tar branch-or-tag-name-or-commit-id |
  (mkdir /path/to/destination && cd /path/to/destination && tar xf -)

git archive 始终适用于本地存储库。它也可以通过 --remote 选项与非本地存储库(或不基于当前工作目录的本地存储库)一起使用;并非所有 Git 托管服务都允许拉取存档(他们可能不想花费 CPU 时间或带宽)。


实际上,您可以使用git archive与任何(即根目录或在任何提交中表示的任何子目录),但它通常与分支末端、标签和提交一起使用。

+1 漂亮的回答。有几件小事情-如果没有指定输出文件,targit archive的默认格式,因此您不需要该参数。另外,您可以使用“tar -C /path/to/destination -x”(如这里建议的)代替“cd /path/to/destination && tar xf -”。 - Mark Longair

1

做:

git clone (path to your repo)

或者如果您不想要.git元数据,请执行以下操作:

git archive (branch)

是的,但我会得到整个存储库,而不是我想要的版本/标签。目前,我会检出我需要的标签(这就是为什么我已经给每个提交打了标签,以便我可以检查它们),将包含我想要的标签的工作文件夹复制到其他地方,然后再次检出主分支,但我不确定这是否是正确的方法。 - donescamillo
你可以向 git archive 传递一个标签 ID,它将只检出该标记版本的树。 - Kirby Todd
1
您无需标记提交以便检出它。您只需检出该提交即可。 - William Pursell

0

您的问题是:

我如何(我不知道checkout是否是正确的词)从GIT存储库中获取任何版本并将其放入任意文件夹,而无需切换分支(或任何其他GIT可能认为必须执行的操作)?

您想使用git checkout命令:

git checkout myTag1.2.3 
git checkout asdf81274982shjsks 
git checkout origin/develop

checkout命令的参数可以是分支、标签或SHA1哈希。

你总是会得到完整的代码库。你不能只下载部分代码。记住,git存储的是完整代码库的快照。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接