我有一个由其他团队共享的SVN服务器,我有一个新项目要提交给SVN。
首先,我将它添加到Git控件:
git init
然后,通过以下方式将所有文件添加到Git:
git add .
然后,通过以下方式将所有文件提交给Git:
git commit -am "Initial Commit"
然后,我通过以下方式链接到SVN:
git svn init https://my_account@my_svn_server_host.com/svn/external/trunk/projectA/
其中projectA
文件夹不存在。然后,我尝试从服务器获取更新:
git svn fetch
错误到了。
W:Filesystem没有项目:'/ svn / external /!svn / bc / 5060 / trunk / projectA' 路径未在/ usr / libexec / git-core / git-svn第1801行找到
W:忽略来自SVN的错误,路径可能不存在:(160013): 文件系统没有项目:'/ svn / external /!svn / bc / 5060 / trunk / projectA' 路径未找到
W:不要对上面的消息git-svn感到惊慌 只是积极地寻找旧的历史。这可能需要一段时间 大型仓库
然后我试着拒绝:
git svn dcommit
然后,它给出了:
Unable to determine upstream SVN information from HEAD history.
Perhaps the repository is empty. at /usr/libexec/git-core/git-svn line 541.
我错过了什么?
我使用的是Mac OS X 10.7,MacPorts 2.2.0
更新:根据@ Wes的回答,结果如下:
# git init
Initialized empty Git repository in /Users/path/to/my/projectA/.git/
# git checkout -b "mychanges"
fatal: You are on a branch yet to be born
# git checkout master
error: pathspec 'master' did not match any file(s) known to git.
糟糕!似乎不起作用。
答案 0 :(得分:0)
你真的不能这样做。 git svn
要求你有一个线性历史记录(好吧,git没有; svn本身就是这样)。所以你的所有git工作都必须在svn。
正确的做法是首先使用git svn clone
镜像远程存储库,然后提交到已检出的版本并运行git dcommit
。
是的,还有其他方法可以做到这一点,但是你上面这样做的方式会在拉入远程内容之前进行提交,这将无效。
如果您只是尝试将所有现有更改添加到远程版本中,您可以这样做:
# git init
# git checkout -b "mychanges"
# git checkout master
# git svn init ....
# git svn fetch
# git checkout mychanges
# git rebase master
# git checkout master
# git merge --ff-only mychanges
# git dcommit
这是未经测试的,但它应该做你想要的。