我计划将我的项目迁移到git,我现在想知道哪个是Windows下最好和/或最稳定的选项.
从我收集的内容我基本上有2.5个选项:
注意:IMO Cygwin本身就是一个很大的优势,因为你可以访问几乎所有的*nix命令行工具,就像使用MSYSgit bash一样,你只能访问这些工具的一小部分.
鉴于此,您会建议什么选择?
我有一个我必须承诺的中央SVN存储库,但我对git充满热情(就像我认识的任何其他开发人员一样).这个案子众所周知.
然后我读了一下git-svn并尝试了一下.由于我不需要完整的历史,仅仅两个月左右,我就是这样的:
git svn clone -r 34000 -s https://svn.ourdomain.com/svn/repos/Project/SubProject
Run Code Online (Sandbox Code Playgroud)
像往常一样,SubProject拥有子目录trunk,tags和branches.大.
然后,为了获得最后一次修订,我做到了
git svn rebase
Run Code Online (Sandbox Code Playgroud)
有些下载,很棒.最后修订,日志等等,好的,现在我将切换到我的功能分支.
$ git branch
* master
Run Code Online (Sandbox Code Playgroud)
$ git branch -r
trunk
Run Code Online (Sandbox Code Playgroud)
$ git branch -a
* master
remotes/trunk
Run Code Online (Sandbox Code Playgroud)
问题是:我的分支在哪里?我做错了什么吗?我怎么做才能在新的git仓库中获得我的分支机构?
git-svn,无论我在哪里阅读它,明智地处理分支和标签,但行为不是我所期望的.谢谢!
编辑:我刚刚发现git svn fetch将会这样做.但它会得到所有修改,这是我不喜欢的.
我在网上看过很多"从svn转到git"和其他"git-svn工作流程"的文章,但我认为它们经常处理过于简单的情况.它们通常针对那些只想在本地使用git和hack的人,而不是使用git的全部功能,比如在多个开发人员之间使用git-svn克隆svn存储库时的pull,fetch,merge等,然后仍然希望能够随时将他们的更改推送到(官方)svn存储库,然后回到git工作并分享他们的东西等.
每当这些文章承认你不能做你在纯git中所做的一切时,后果和可能的搞砸都没有明确解释(或者也许只是我?).即使是git-svn手册页也提到了警告,但并没有真正广泛地提及.
基于我所读到的内容,我觉得当git-svn以特定方式使用时可能会出现问题,我将在下面介绍.有人可以告诉我,我是对的吗?
这是"通缉"的做事方式:
我的问题是:我在做梦吗?我前段时间读过一本git书,我认为,git-svn-clone可以创建git存储库,当然它们是svn repo的"镜像",但是不同开发人员以这种方式创建的git存储库会有所不同" ids"和提交将有不同的哈希.所以我的理解是那些git repos不会共享任何常见的git祖先,因此无法使用共享,合并等所需的所有git命令.这是真的,我们是否会面临这个工作流程的问题?
有时我读到这可以完成,至少使用一个"官方"裸git存储库,这将是唯一一个git-svn-cloned,并且所有git用户都必须从这个开始.然后你需要一个负责这个中央git仓库的人,并在将所有东西都提交给svn repo之前收集git devs之间的变化.这将是git用户"不知道"原始git repo来自svn的唯一方法,并允许他们使用所有git命令.唯一需要精通git和svn(并且了解git-svn警告)的人将是"合并经理"(或者他称之为的任何人).
我完全误解了git-svn警告吗?有没有更简单的方法呢?
我想使用GIT和SVN客户端访问存储库.我想象的一种方法是通过自动双向迁移:当用户推入GIT存储库时,它也在SVN存储库中被COMMITed,反之亦然.
有什么工具可以帮我做到这一点吗?
我们公司的subversion repo有点棘手:我们有一个基本的"默认"布局,包括主干,标签和分支.但是,在分支内部,我们有一个"工作"目录,其中包含更多分支.像这样的东西:
现在我如何让git-svn将所有这些(以及更多)识别为单独的分支?它似乎git svn init只接受一个分支位置,我怎么调用它.
编辑:这是我初始化git repo的方式:
git svn clone -s --prefix=svn/ http://svn.company.com/product/
Run Code Online (Sandbox Code Playgroud) 是否有一个程序可以执行git-svn的功能,但是在服务器上的存储库是git,开发人员使用svn的情况下?
我知道github.com允许svn访问他们托管的git存储库,但看起来他们没有发布这个项目开源(但是?),并且使用他们的服务器对我来说不是一个选项(甚至不是他们的选择)私人仓库).
编辑:我认为我正在寻找的是与'git-cvsserver'平行 - git-svnserver.在一些搜索中,我在git邮件列表上找到了一些2-3岁的线程,但看起来并没有任何人取得重大进展.我希望有人可以纠正我.
目前有没有git-svnserver项目正在进行中?我讨厌重复努力,但似乎GitHub是最远的,但没有其他人可以拥有它.
我有一个情况,我有一个老年人的CVS存储库,我们希望一次性转换为git,同时保持完整的历史记录等.
存储库根目录下的所有文件夹都包含Eclipse项目(普通或动态Web项目),包括.classpath和.project.我们使用Team ProjectSet来检查给定任务所需的项目(项目集位于包含main的项目中,其余是库项目).
签出Team ProjectSet后,工作区将完全填充.
多年来这种方法运作良好(除了3.5附带的项目设置部分),如果可能的话,我们希望以类似的方式使用git,但我们不确定如何.
我玩过一段时间git cvs import但失败了 - 可能是因为我们没有使用模块.
您如何建议我们这样做,以及我们应该如何使用git来允许我们当前使用共享库项目?我们将HAVE介绍Maven和创造我们的图书馆项目的Maven模块?或者只是蚂蚁常春藤?
编辑:我现在设法通过合适的cvs2svn调用将我们的CVS存储库转换为Subversion,并发现Eclipse很好地识别了生成的Subversion存储库.不幸的是在克隆http: //github.com/iteman/svn2git`并尝试运行bin/svn2git之后我得到了
tra@Sandbox:~/cvsgit/svn2git/svn2git$ bin/svn2git
bin/svn2git:35:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)
from bin/svn2git:35:in `new'
from bin/svn2git:35
Run Code Online (Sandbox Code Playgroud)
这是与Ubuntu 10.04.1 LTS服务器,我尝试了各种sudo与Ruby及其宝石的东西,但没有完全理解我做了什么,因为我不是一个Ruby程序员,所以我可能搞砸了一些东西.我很感激建议 - 如果最简单的是安装另一个Linux变种来进行转换,那很好.
编辑:
https://help.ubuntu.com/community/Git http://css.dzone.com/articles/subversion-git-morning
编辑:我第一次尝试使用默认的svn2git成功完成(一段时间后),我得到一个很好的存储库,其中git branch -a大致报告
tra@Sandbox:~/gitroot/svnroot$ git branch -a
* master
remotes/XX64_DEPLOYED_CODE
remotes/Beta1
remotes/Beta2
remotes/SV46
... lots more
Run Code Online (Sandbox Code Playgroud)
我们有兴趣能够检查SV46分支并使用它(我们基本上不关心标签,只关心实际的分支).我已经设置了gitosis并将此存储库推送到gitosis,并将其克隆到另一台计算机,以了解如何使用Eclipse进行"使用SV46"位. THAT库不知道所有的分支:
tra@TRA ~/git/git00 (master)
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
我是否需要按照svn2git的原始结果来获取gitosis存储库中的信息?我需要用参数克隆吗?我应该使用建议的版本而不是Ubuntu附带的版本重做svn2git步骤吗?
编辑:事实证明,使用"git …
我正在使用git-svn来跟踪同一个svn存储库中的多个分支.通常情况下这很好,但今天我已经完成了一些重置和重新设置,突然我的分支机构不会再向正确的远程分支发送:
$ git branch
* master
a
b
$ git svn dcommit -n
Committing to svn://server/repo/trunk ...
$ git checkout a
$ git svn dcommit -n
Committing to svn://server/repo/branches/a ...
$ git checkout b
$ git svn dcommit -n
Committing to svn://server/repo/branches/a ...
Run Code Online (Sandbox Code Playgroud)
所以分支b将提交到branches/a目录而不是branches/b目录.
我试过更改跟踪的分支:
$ git branch --set-upstream b remotes/b
Run Code Online (Sandbox Code Playgroud)
和其他东西,但唯一有效的解决方案是删除分支b并重新创建它:
$ git branch -D b
$ git branch b remotes/b
$ git svn dcommit -n
Committing to svn://server/repo/branches/b ...
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:git svn如何确定要提交的目录?我该如何修改这个目录?
谢谢,
乔纳斯
我们的svn服务器有一个名为Dev和Branches的主干
/Branches/Release/1.0/
/2.0/
/2.3.4/
我克隆它的东西就像git svn clone -T Dev ... -b Branches ...
我跑的时候git branch 2.1 remotes/Release/2.1得到的:
fatal: Not a valid object name: 'remotes/Release/2.1'.
我厌倦了颠覆,它不断破坏自己的存储库.因为我很长一段时间都是古怪的并且总是想尝试一下,所以我决定试一试并使用git-svn.但阅读文档我意识到你不能使用它的git awesomeness.你不能使用git-pull,不建议创建本地分支,并且有很多限制.看起来它比直接使用subversion好多了.或者是吗?git-svn对普通svn有什么利弊?
PS.对不起,我不是在问你如何修复我的subversion存储库,我不在乎.一夜之间删除同一目录中的所有.svn和checkout工作正常.我只是想知道git-svn带来什么好处.