3

我是 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

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

4

2 回答 2

3

您要做的就是创建另一个克隆。除非您有充分的理由不这样做,否则它将复制所有历史记录(不用担心,它通常小于 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 -

创建一个模拟的同事 repo:

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

这两个操作fetchmerge是同时完成的pull。所以你可以这样做

git pull origin master

所以标签被获取。当你意识到 pull 是 fetch 和 merge (或者如果你想变基)放在一起时,这是暗示的。

于 2012-09-27T19:27:31.347 回答
1

您的历史记录中已经有了标签。您可以使用git tag -l列出所有可用的标签,并且可以随时git checkout访问它们。

git checkout v1.0
于 2012-09-27T18:38:45.623 回答