git version 1.7.3.3
我有一个使用git的项目。
我们公司改变了政策,希望每个人都切换到svn。
所以我使用标准布局(主干,分支和标签)在subversion中导入了我的项目。
所以我目前的工作流程如下:
进行一些更改,将它们放在暂存区域中,然后将它们提交给git。但是,当涉及到svn时,我有点困惑。首先,我决定从颠覆中获取最新的变化。然后我做了一个dcommit。
即
暂存更改文件
git stage app_driver.c
将它们提交给git
git commit -m"Added some changes"
从svn获取最新更改
git svn rebase
将我最新的更改提交给svn
git svn dcommit
将更改推送到我的git存储库
git push upstream my_project
但是,当我在git中创建一个新分支时,真正的混乱就出现了,以及我如何在subversion中提交该分支。
git checkout -b add_new_feature
然后如何在svn中创建新分支并提交它?
非常感谢任何建议,
答案 0 :(得分:3)
我通常使用svn copy在subversion中创建一个分支。
例如,假设我的行李箱在 https://svnserver/svn/MyProject/trunk我希望在https://svnserver/svn/MyProject/branches/my-branch中创建一个分支,我会这样做:
svn copy https://svnserver/svn/MyProject/trunk https://svnserver/svn/MyProject/branches/my-branch
好的,这可以摆脱创建svn分支,但是用git获取这个分支我会去我的目录并做一个git svn fetch。这将从svn获取内容但不会修改您当前的分支。
如果您使用git svn init --stdlayout启动项目,则在执行git branch -r时将显示您的分支。然后你可以用这样的东西结账:
git checkout -b my_local_branch_name my_remote_branch_name
注意:不要为本地分支和远程分支使用相同的名称,否则git会抱怨(虽然它有效。)
然后你就可以正常工作了。
答案 1 :(得分:1)
在这种情况下,我首先在subversion中创建分支,因为听起来你想要一个长期开发分支,稍后将其与/ trunk的内容合并。
当我想对/ trunk中的任何内容进行短期修复时,我会按照您的意愿执行操作:
git checkout -b add_quick_change
然后改变。
然后当我想把它放在/ trunk中时:
git checkout master
git pull --no-squash . add_quick_change
git svn dcommit
这应该将所有历史记录复制到master中,以便在dcommit之后以subversion结束。