2011-11-19 115 views
0

我刚开始玩弄git(来自SVN),我确信我没有以正确的方式思考 - 我从github克隆了一个仓库,并从中删除了标签并添加了我自己的仓库。但是当我做一个git状态或git diff时,它表示没有任何提交。它不应该与我从克隆的github项目进行比较吗?我正在想这是我所知道的错误方式,但也许有人可以帮我把这个包裹起来。添加/删除标签不会显示在git status或git diff?

回答

0

看着这个错误的方式。

你需要做的是忘记你对svn的了解。在svn中,你有一个仓库,它位于服务器上。您更改文件并提交它们的增量。

然而,在你的计算机上有一个仓库。如果你愿意,你也可以在github上找到一个。其他人在您的项目上工作也将拥有自己的存储库。请注意我说的知识库。是!库!这意味着你的计算机中拥有所有的历史记录。你可以在你自己的计算机上提交,创建标签,分支,合并,所有内容,而不用在github中触摸任何东西。

欢迎使用分布式版本控制系统。

与svn的另一个区别是,你没有看到提交作为增量,但你看到每个提交作为你项目的整个文件集。因此,例如svn的奇怪合并(你说合并这个修订版本和我的文件修订版本之间的区别)在git中不存在。您只需合并该项目的快照即可。

然后提交意味着将更改提交到您的文件到您自己的存储库。创建标签是另一个过程。一个不会改变你的文件的过程(与创建标签意味着复制文件的svn不同)。 git中的标签只是指向特定提交的指针!

所以,你想要做的是两种不同的东西:

  • 提交:提交资料库修改。该命令是

    git commit 
    

    您可以将文件添加到与git add some_file提交和提交更改的只是一部分,你的源代码(这东西你不使用svn获得)。或者,如果您要提交所有更改的文件,请添加-a选项。

  • 推送:推送发送到另一个存储库,让我们说一个远程存储库,名为origin(指向github),所有你在自己的仓库中。这包括所有提交,并且如果您指定-tags也是您创建的标签。例如:

    git push origin master -tags 
    

或者,当你想更新你的资料库,从起源,你首先:

  • 取:更新你的资料库到远程之一。著名的:

    git fetch origin 
    

    由此带来的所有新提交和存在于origin标签,但不是你的本地仓库。

  • 合并:然后更新您的主分支远程年代:

    git merge remotes/origin/master 
    

所以回到你的情况下,没有没有什么承诺,但也有您需要按标签。最后要告诉你的是,当你删除标签时,你只能从自己的存储库中删除它们。为了从远程删除:

git push origin :refs/tags/tag_name 

理解这种语法需要更多一点的混帐推高级教程,但现在接受这一点。请注意,删除标签强烈不满。这是因为如果有人下载该标签并开始使用该标签并依赖该标签,那么如果她需要该标签,她以后就无法再找到该标签。因此,在创建标签时,确保软件/库符合您的要求。

0

标签指向其他对象它git(通常提交)。如果删除标签(通常不应该添加)或添加它们,则不会添加属于提交的任何内容,因此不需要提交任何内容。您可能需要阅读the git object model