我已经成功使用 git-svn 连接到我的 svn trunk 一段时间了。我最初通过这样做来设置我的存储库:
git svn clone -s http://domain.com/svn/name-of-repo
Run Code Online (Sandbox Code Playgroud)
我已经有这个设置很长一段时间了(也许接近一年)并且没有遇到问题,很可能是因为我所做的一切都在本地 git 分支上,我最终合并回我的 master 分支,并提交回来到 svn 主干。
最近,我需要开始向同一个 svn 存储库中的另一个分支提交一些更改,http://domain.com/svn/name-of-repo/branches/demo。
通过编辑 .git/config 文件并添加以下行,我可以从该分支获取一次:
[svn-remote "svndemo"]
url = http://domain.com/svn/name-of-repo/branches/demo
commiturl = http://domain.com/svn/name-of-repo/branches/demo
fetch = :refs/remotes/git-svn-demo
Run Code Online (Sandbox Code Playgroud)
然后我运行以下命令来获取演示分支,从修订版 4034 开始:
git svn fetch svndemo -r 4034
Run Code Online (Sandbox Code Playgroud)
所以现在我有一个名为remotes/git-svn-demo的新远程分支。由此我创建了一个功能分支:
git checkout -b svndemo-local remotes/git-svn-demo
Run Code Online (Sandbox Code Playgroud)
这抓住了我需要的东西,所以我做了必须做的更改,提交给我的本地分支,然后尝试运行“git svn fetch && git svn rebase”。两者都返回错误:
无法从工作树历史记录中确定上游 SVN 信息
这就是我陷入困境的地方。我环顾过SO和其他网站(Google),但除了“git-svn再次克隆存储库,然后重新开始”之外没有找到解决方案,这并不理想。
我查看了我的 .git/svn/refs/remotes/git-svn-demo/unhandled.log 并将其与我的 .git/svn/refs/remotes/trunk/unhandled.log 进行了比较,没有什么明显不同他们。
我还查看了来自该远程分支的初始获取的提交消息,其中包含 git-svn-id 信息。
等等等等,这是提交消息,等等等等
git-svn-id:http://domain.com/svn/name-of-repo/branches/demo@4034 e6edf6fb-f266-4316-afb4-e53d95876a76
我很想听到关于这个的新想法。
我已经使用 git-svn 一段时间了(我团队中的其他人都直接使用 svn)。我们决定我们都开始使用 git。为了做到这一点,我使用了 git repo,它是 git-svn 的“一面”,如下所示:
$ git remote add origin git@github.com:mycompany/myproject.git
$ git push -u origin master
Run Code Online (Sandbox Code Playgroud)
这很顺利,但是当这个过程完成后,我保留了 git-svn 在我第一次开始使用它时创建的所有这些荒谬的分支,有一个小问题;git 甚至不再承认它们是分支。我的清单如下:
$ git branch -r
domain_integration
dot-org
dot-org@1977
email-edit-page
origin/account-integration
origin/master
origin/stable
prototype_to_jquery-1.1.0
stable@1976
tags/development-1.1.0.0
tags/pre-2011-02-08
tags/production-1.0
tags/stable-1.0.0
tags/stable-1.0.1
tags/stable-1.1.0
tags/stable-1.1.0.1
trunk-stash
Run Code Online (Sandbox Code Playgroud)
这些很烦人,虽然我知道它们(大部分)来自哪里,但现在我什至无法删除它们。有时候是这样的:
$ git branch -d trunk-stash
error: branch 'trunk-stash' not found.
Run Code Online (Sandbox Code Playgroud)
我可以通过进入 .git/refs/remotes 并删除它们来修复其中的一些问题,但那里只有几个。我唯一能找到它们的地方是 .git/info/refs。看起来像下面这样:
...
7788d300f0d4370d65a3ccf3e47d90f7fb16b0b4 refs/remotes/tags/stable-1.0.0
aace34d6745080ce2b6b29e927f5d1b050b99511 refs/remotes/tags/stable-1.0.1
58bd2ac23d5979ff61bd6305df18f8a5da50f888 refs/remotes/tags/stable-1.1.0
644fd55fcdf2569305cdbe0b6fefb9f247625658 refs/remotes/tags/stable-1.1.0.1
bc8e9f9177c9612aceb55624adea1b02e9e8620f refs/remotes/trunk
69493e14345e6a7a4db324935bccd6393f201da4 refs/remotes/trunk-stash
25b7024f6c1d38c10400b2c2e7b446aae1e84e06 refs/stash
...
Run Code Online (Sandbox Code Playgroud)
我认为这只是将分支与其上次提交相关联。删除“假”的有意义吗?这会破坏什么东西吗?(会起作用吗?)
我需要使 git svn diff 生成基本上逐行相当于 svn diff 生成的 diff 的 diff。
我非常熟悉各种脚本,例如git-svn-diff.sh,这将使补丁与 svn 兼容,但是当 diff 不明确时,两个 diff 引擎通常会有所不同,我需要对此进行规范化。基本上,我需要 git svn diff、svn diff 和 svnlook diff (用于 svn 预提交挂钩)来生成完全相同的补丁(模翻译),据我所知,因为我无法覆盖 svnlook 的diff 引擎,我被困在使用 svn 的内部 diff 引擎。
这很好,除了 svn 似乎没有一个工具可以让你使用内部引擎来比较两个文件。我看到源代码有一个tools/diff/diff.c,但没有分发二进制文件。我是否陷入了自己分发这个工具的困境,它是否存在但我错过了它,或者我可以让预提交挂钩使用不同的差异引擎为事务生成补丁吗?
我的机器上有 SVN 工作副本,我想从中创建 git 本地存储库。之后,我希望能够将我的更改从新创建的本地 git 存储库推送到 svn 存储库。我的想法是避免通过 git-svn 克隆 svn 存储库,因为这会花费一些时间。
注意:我在 CLI git/git-svn 中看到过有关此情况的问题,但在 TortoiseGit 中没有看到任何问题。
我下载并安装了 Git 和 TortoiseGit。我已经有一个远程 SVN 存储库,并且安装了 TortoiseSVN,如果这有什么区别的话。
创建空目录后,我使用右侧上下文菜单,如下所示:
当我点击“确定”时,会弹出一个窗口,显示它正在连接到存储库,并且它会滚动浏览所有修订版本,直到 r 1693,这是我的最新版本。它显示“成功”,并且我的本地文件夹中有一个 .git 目录。但没有文件。
我按如下方式摆弄它:
SVN Fetch 似乎是显而易见的选择。当我更改修订版号时,克隆操作失败并显示以下消息:
git did not exit cleanly (exit code 1) (16078 ms @ 12/16/2013 10:31:27 AM)
Run Code Online (Sandbox Code Playgroud)
我要开始摆弄 CLI,但我怀疑我也会遇到同样的问题。毕竟这是一个非常基本的操作。感谢您的帮助。
我正在尝试对一个非常大的 SVN 存储库进行 git svn 克隆。我已经使用git svn clone完整的分支、标签和维护的历史记录完成了早期的迁移,一切进展顺利。但这一次脚本运行一段时间后抛出错误:
libsvn: Out of memory - terminating application.18 [main] perl 13884 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
我到处研究但找不到与此相关的任何内容。如果有人遇到类似的错误,我将不胜感激任何建议。
我开始按照这篇文章执行从 SVN 到 GIT 的迁移。
6天前,我执行了这个:
git svn fetch
Run Code Online (Sandbox Code Playgroud)
而且它还在运行!我可以看到控制台日志不断更改修订号,并且我可以看到目录的大小不断增长。目前是12GB。
所以我的 SVN 存储库很大,我明白,它还有很多分支,但没有帮助。问题是有没有办法查看当前进度的百分比是多少?我只是想知道已经完成了多少百分比的获取。
我有一个非常大的 SVN 存储库(近 6000 个修订版),我需要将其迁移到 Git。该存储库托管在内部服务器上。我想将所有历史记录、标签和版本迁移到 Git,并以 Git 格式创建分支等。
到目前为止,我在我的机器上安装了 TortoiseSVN,并一直在尝试使用 git svn clone,但是,很多文件夹太大,并且出现块大小错误。同时,某些文件的文件路径中包含非法字符,因此在迁移过程中会被跳过。
我还尝试使用 TortoiseSVN 将工作副本检出到本地计算机中,然后尝试通过设置本地svnserve(设置为 Windows 服务)来迁移它,但是,我永远无法使其能够访问文件使用svn://localhost/...我按照指南(https://subversion.open.collab.net/articles/svnserve-service.htm)将其设置为服务,我可以到达例如svn://localhost/dev,但是,当我通过Tortoise将文件检出到此文件夹中时,它没有看到它们,svn://localhost/dev/<sub-folder>显然我做错了什么,但是,我不确定是什么。
结构如下:
repository (top level)
- folder 1
- sub-folder 1
- sub-folder 2
- ...
- folder 2
- sub-folder 1
- ...
- ...
Run Code Online (Sandbox Code Playgroud)
最后,我尝试使用 svn2git,但是,在这种情况下我也遇到错误。
进行迁移的最佳方法是什么和/或我做错了什么?任何帮助表示赞赏!
我试图在Windows机器上设置Git,到目前为止所有似乎都在工作...除了这个:
net start sshd 得到错误 NETHELPSMG 3534
当我输入
cygrunsrv --start sshd 我明白了 QueryServiceStatus: Win32 error 1062
任何想法如何解决这一问题?
我希望在我们的本地服务器上安装一个版本控制系统.我一直在关注SVN和GIT的优缺点,甚至是Mercurial.
目前我们有大约30-35个不同的网站.我会创建一个包含所有文件夹的仓库吗?还有哪个更好地处理所有这些作为个人网站项目?GIT还是SVN?
我还必须在我们的Linux服务器上安装它,并为开发人员创建开发沙箱.涉及的人也使用Windows和MAC.
我只是在寻找经验建议,以及如何在服务器上本地安装它们的指导性链接.
至于APPS,我相信TourtiousGIT/SVN在Windows上很好,而Tower和Versions在MAC上也很不错.