Git:通过标签从远程拉出

时间:2012-09-27 18:27:59

标签: git version-control

我是git的初学者,并且已经在我的本地计算机上测试了几个命令,创建了一个本地存储库来拉取和推送。

我在'项目'中设置了一个裸存储库。并克隆了两个用户:' user1'和' user2'从中。该项目目前有文件' one.txt',' two.txt'等等一些提交标记为' v1.0',' v2.0'与添加新的"#。txt"相关联等。文件。

但是,当我尝试在新文件夹“tmp”中创建一个新的git工作目录时,将项目添加为远程存储库(tmp不是克隆),并且拉动,我得到错误:

$ git pull ../project v1.0
$ fatal: 'v1.0' does not appear to be a git repository
$ fatal: The remote end hung up unexpectedly

当我只是尝试从项目中拉出主分支时,这不会发生,所以我假设我有权拉。发生了什么事?

2 个答案:

答案 0 :(得分:2)

您要做的就是创建另一个克隆。除非你有充分的理由不这样做,否则它将复制所有历史记录(不用担心,它通常小于svn仓库大小的10%,并且由于压缩而通常小于工作目录)。

创建您的第一个回购:

mkdir myrepo
cd !$
git init
echo one > one.txt
git add -A
git commit "my first commit"
git tag v1.0
echo two > two.txt
git add -A
git commit "my second commit"
git tag v2.0

创建一个模拟的中央仓库:

cd ..
mkdir centralrepo
cd !$
git init --bare # don't want to have a working directory here
cd -

创建一个模拟的同事回购:

mkdir coworkerrepo
cd !$
git init

告诉您的回购中央回购的位置

cd ../myrepo
git remote add origin ../centralrepo

告诉你的同事回购中央回购的地方

cd ../coworkerrepo
git remote add origin ../centralrepo

将您的工作发布到中央仓库:

cd - # useful shortcut for flipping between two dirs (works for git checkout and branches too)
git push origin master 

提出主引用和提交内部,但不是标记。对于标签,请执行以下操作:

git push origin v1.0
git push origin v2.0

或只是用

推高回购广告中的所有代码
git push origin --tags

您现在可以通过

检查遥控器是否包含这些标签和参考
git remote -v show origin

切换到同事的存储库并获取这些更改:

cd -
git fetch # will update tracking branches and tags
git merge origin/master # fast-forward master branch to what the remote tracking branch is pointing to

两个操作fetchmergepull同时完成。所以你可以这样做

git pull origin master

因此标记被获取。当你意识到pull是fetch和merge(或者你想要的rebase)放在一起时,就暗示了这一点。

答案 1 :(得分:1)

您的历史记录中已有标记。您可以使用git tag -l列出所有可用标记,并且可以随时git checkout向其发送。

git checkout v1.0