2011-03-24 74 views
4

到目前为止,作为项目中唯一的人员,我一直在复制/粘贴我的项目文件夹并将它们重命名为版本控制方案(Ver1,Ver2,Ver3等)。 现在我试图切换到Git。如何从git结账

这就是我所做的:
我初始化了.git文件夹,并将第一个版本添加到Git存储库。 然后我将所有其他版本作为提交添加到git存储库并对它们进行了标记。 所以现在我拥有主分支中的所有版本和标签。我的问题是:
我怎样才能(我不知道结帐是合适的词)从Git仓库抓取任何版本,并将其放入任意文件夹中,无需切换分支(或任何其他操作,Git可能会认为它必须这样做)?只需将Git中的版本(任何版本)复制到Git存储库和文件夹之间没有任何连接的文件夹中?

回答

1

做:

git clone (path to your repo) 

,或者如果你不想让git的元数据做:

git archive (branch) 
+0

是的,但我会得到整个回购,而不是我以后的版本/标签。目前我检出我需要的标签(这就是为什么我标记了每个提交,所以我可以检查它们),复制其他地方的工作文件夹(包含我之后的标签),然后再次检出主标签,但是我不知道这是否正确 – donescamillo 2011-03-24 12:26:11

+0

您可以通过git归档标签ID,它只会检出树的标签版本。 – 2011-03-24 12:32:39

+1

您不需要标记提交以检查它。你可以检出提交。 – 2011-03-24 13:28:47

0

你的问题是:

我如何(我做不知道结账 是否合适)从GIT仓库抓取任何版本 ,并将其放入 一个任意的文件夹没有切换 分支(或其他任何操作GIT 可能认为它必须做)?

您想使用的git checkout命令:

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

结账的参数可以是一个分支,标签或SHA1哈希。

你总是得到完整的存储库。你无法检出它的一部分。请记住,git存储完整存储库的快照。

2

通常你考察历史版本直接在您的正常工作树(你可以检出任何承诺为“分离的头” /“未命名的分支”)或间接查看历史记录与git log(尤其是-p选项),git blame,等等。

但是,如果你真的需要完全拆开旧的版本,你可以使用git archive命令创建一个特定的焦油档案提交(标签名,一个分支名(你会得到它的提交提交)或提交对象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任何tree(即根目录或以任何承诺表示的任何子目录),但它是最常见的枝梢,标签中使用,并提交。

+0

+1不错的答案。一些小的东西 - 如果没有为'git archive'指定输出文件,'tar'是默认的格式,所以你不需要这个参数。此外,而不是'cd/path/to/destination && tar xf -',您可以执行'tar -C/path/to/destination -x' [如此处所示](http://stackoverflow.com/questions/ 3364575 /什么最最好的方式对提取物-A-树从-A-混帐资料库/ 3364612#3364612)。 – 2011-03-26 07:14:31