我正在开发一个网站项目,该项目目前在 svn 中跟踪,但一旦其他人有时间设置新服务器和其他东西,我就会转移到 git。这是一个很长的故事,但与此同时,我已经用我拥有的一些代码创建了自己的 git 存储库,并对其进行了大量工作。我没有使用 git svn clone ,因为我在海外,我的互联网连接很奇怪,需要 HTTP 代理,而且它似乎不允许 git svn 通过。无论如何,我一直在自己的 git 存储库中进行开发,但最终一旦项目实际正确导入,我将需要将我的工作重新定位到 git-svn 克隆的东西上。 git rebase
能正常工作吗?
一个复杂的情况是,我实际上是在虚拟机中工作,对于许多提交,我没有意识到我没有设置 user.name 和 user.email 配置条目,因此提交来自虚拟机的本地用户,这有点奇怪。将所有更改收集到 diff 文件中,然后在创建新分支后将它们应用到新分支的顶部,这样会更好吗?
另一个复杂之处是,之前对 SVN 的使用有点三心二意,因此生产服务器上实际上存在我没有的未提交的更改。事实上,我一开始就对代码进行了较旧的修订,甚至不是 SVN 头,所以我错过了一些最重要的东西。最好的方法是什么?
最后一个问题是,如果我确实通过 git svn 导入 SVN 存储库(我刚刚检查过,它似乎现在正在工作),但我不添加作者文件,我会吗?稍后能够使用作者文件将我的更改重新设置到正确导入的分支上?
哦,一个新的并发症。我自己使用 git svn 导入了 SVN 存储库,这是一个艰苦的过程,在这种缓慢的连接上花了两天的时间。然而,最终完成克隆后,我意识到在SVN存储库中,代码都在子目录中,但在我的git存储库中,存储库的根目录也是目录的根目录。如果这有点令人困惑,它基本上是这样的
SVN:
\dir\codez
git:
\codez
如何 merge 两个存储库?我希望我仍然可以使用 rebase,但这似乎是一个非常奇怪的情况。这听起来与子模块类似,但我认为这并不是我所需要的。
最佳答案
I didn't use git svn clone because I'm overseas and my internet connection is weird and requires a proxy for HTTP
如果你设置它应该可以工作
http_proxy=http://username:passwword@pprroxyHost:proxyPort
或者你可以尝试
http_proxyUser=username
http_proxyPassword=password
http_proxyHost=aProxyHost
http_proxyPort=aProxyPort
Will git rebase work properly for this?
一般答案:是的,因为你还没有发布你的 Git 分支。
详细答案:在将结果 merge 到主分支之前,您需要先重新建立分支。请参阅this answer .
这是首选工作流程,因为它允许您在将您的分支 merge (或者如果您想保留历史记录则重新定基)到主分支之前解决您的分支中的任何冲突。
实际上,您将在下面看到创建一个特殊的“merge ”分支实际上是一个更好的主意。
hadn't realized that I hadn't set the user.name and user.email config entries
由于您尚未发布,因此您可以使用filter-branch
来修改您的提交并更改用户名和电子邮件
一点 sh 脚本可以提供帮助
#!/bin/sh
git filter-branch --env-filter '
n=$GIT_AUTHOR_NAME
m=$GIT_AUTHOR_EMAIL
case ${GIT_AUTHOR_NAME} in
aSystemUserName) n="TheActual Name" ; m="TheActual@mailAddress" ;;
esac
export GIT_AUTHOR_NAME="$n"
export GIT_AUTHOR_EMAIL="$m"
export GIT_COMMITTER_NAME="$n"
export GIT_COMMITTER_EMAIL="$m"
'
从您的存储库调用此脚本,您就完成了。
I had an older revision of the code in the first place that wasn't even the SVN head, so I was missing some stuff on top of that. What is the best way to proceed?
此实例中的基本工作流程是从当前工作分支创建一个新的“merge ”分支,以隔离 rebase 工作(并解决所有冲突)
在这种增量很重要的 merge 中,您必须保持工作分支干净,不包含需要进行的所有更改,以便包括:
- 来自 SVN 的代码
- 您没有直接从 SVN 存储库获取的代码。
will I later be able to rebase my changes onto a properly imported branch with an authors-file?
我不确定,但我确实这么认为。如果没有,只要您尚未发布任何内容,您可能需要再次使用 filter-branch
重命名脚本...
关于svn - Git rebase 到稍后创建的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213185/