0

我有一个由其他团队共享的 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:文件系统没有项目:'/svn/external/!svn/bc/5060/trunk/projectA' path not found at /usr/libexec/git-core/git-svn line 1801

W:忽略来自 SVN 的错误,路径可能不存在:(160013):文件系统没有项目:'/svn/external/!svn/bc/5060/trunk/projectA' 找不到路径

W:不要对上面的消息感到惊慌 git-svn 只是在积极地搜索旧历史。在大型存储库上这可能需要一段时间

然后我尝试dcommit:

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.

哎呀!似乎不起作用。

4

1 回答 1

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

这是未经测试的,但它应该做你想做的事。

于 2013-08-12T13:54:27.717 回答