1

我正在使用 git-svn 来练习 git。我的意思是我绝不是 git 专家。一开始我发现 git 令人生畏,但我对 git 的设计和功能着迷。我有一个问题我无法在互联网上搜索,可能是因为它很难搜索。

在使用 git 在功能分支上开发了几天之后(使用 git-svn 克隆之后),我想在git svn dcommit之前重新设置提交。我不想用几十个小的、无意义的提交来淹没 svn 集成分支。为此,我知道我可以使用git rebase -i

此命令需要指定提交。我读过我可以使用一个名为git-svn的(标签?) 。确实,存在这样的提交/标签,我可以git log git-svn..git rebase -i git-svn

到目前为止一切顺利,这行得通。现在,在介绍完之后,我的问题是:

这个git-svn参考是什么?一个标签?一个承诺?命令git tag --list什么都不显示,并且git-svn作为标签在我曾经工作过的其他 git 克隆上不存在。

另一个问题:在我git svn dcommit之后,那个引用会改变吗?可以手动更改吗?

谢谢。

4

2 回答 2

2

在这种情况下,git-svn不是标签。它是一种(特殊的)远程跟踪分支,由git svn clone.

背景:

当您使用 克隆 SVN 存储库git svn clone时,默认情况下整个存储库将被克隆为一个远程跟踪 git 分支(要将 SVN 分支转换为 git 分支,您必须使用选项-T-b-s;请参阅手册页的 SVN 分支处理部分)。在这种情况下,git svn会将该远程跟踪分支创建为"refs/remotes/git-svn"

现在 git 允许您缩写对分支的引用;所以git log refs/heads/master你可以写而不是写git log master。类似地,“refs/remotes/git-svn”可以缩写为“git-svn”。这在手册页中有解释gitrevisions

所以回答你的问题:

这个 git-svn 参考是什么?一个标签?一个承诺?

它是一个远程跟踪分支。它由 显示git branch -a

另一个问题:在我 git svn dcommit 之后,那个引用会改变吗?

是的。分支“git-svn”跟踪您克隆的 SVN 存储库,因此每当您从 SVN 获取新修订时它都会更改;这包括调用git svn dcommitgit svn fetch

可以手动更改吗?

是的,它可以,就像任何其他 git 分支一样。但是,总的来说这是没有意义的;它只会混淆git svn和弄乱您的存储库。在某些情况下是必要的(例如重新获取在服务器上更改的 SVN 修订版),但这是一个不同的问题......

于 2013-10-25T09:25:18.363 回答
0

我在我的项目中广泛使用 git-svn,但找不到名为git-svn的参考。您使用的是哪个 git 版本?

根据我自己的经验,git-svn 创建了一个名为trunk的引用,它指向从 svn 服务器检索到的最后一次提交。当您执行git svn dcommitgit svn rebase时,引用将更新为代表 svn repo 的 HEAD 修订版的提交。

为了执行您描述的 dcommit,您可以:

git svn rebase (to update your current branch to the latest svn revision)
git rebase -i trunk (to rewrite local history before dcommit-ting)
git svn dcommit 

在最后一步之后,主干引用将更新为刚刚提交的 svn 修订版。

于 2013-10-25T09:24:33.293 回答