我是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
当我只是尝试从项目中拉出主分支时,这不会发生,所以我假设我有权拉。发生了什么事?
答案 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
两个操作fetch
和merge
与pull
同时完成。所以你可以这样做
git pull origin master
因此标记被获取。当你意识到pull是fetch和merge(或者你想要的rebase)放在一起时,就暗示了这一点。
答案 1 :(得分:1)
您的历史记录中已有标记。您可以使用git tag -l
列出所有可用标记,并且可以随时git checkout
向其发送。
git checkout v1.0