标签: git-svn

如何使用git-svn获取/克隆少数分支?

我正在使用的SVN存储库具有相当多的分支.我只对与他们中的三个以及将来创建的另一个新的SVN分支感兴趣.到目前为止我所知道的是该命令git svn clone URL -T trunk -b branches -t tags将克隆所有SVN分支,后续git svn fetch命令也将在所有SVN分支上运行.

有没有办法让我指定我想要使用的几个分支?我很可能没有足够的磁盘空间用于我的开发机器上的所有SVN分支,我想避免非常耗时的git svn clone操作.

svn git branch git-svn

5
推荐指数
1
解决办法
4550
查看次数

配置(或模仿)svn:externals以包含来自svn托管项目的Github中的代码

我们在本地使用Subversion,我们正在开发一个使用Fluent NHibernate的分支的项目,它在Github上托管.

我想它设置,以便单个svn checkout将检索构建项目所需的一切,但保持从github获取HEAD更新的能力.

有什么方法可以从Git存储库中提取代码,好像它是一个svn:external依赖项?我可以将.git文件夹检查到我们的Subversion存储库中,并在需要时运行git fetch,然后svn提交结果吗?

svn git github git-svn svn-externals

5
推荐指数
1
解决办法
1521
查看次数

使用git-svn维护一组本地提交

我正在使用git开发针对subversion中托管的项目,使用git-svn:

git svn clone svn://project/
Run Code Online (Sandbox Code Playgroud)

我的一般工作流程是在主分支上重复编辑和提交,然后通过以下方式提交到svn存储库:

git stash
git svn dcommit
git stash apply
Run Code Online (Sandbox Code Playgroud)

"stash"命令保留的本地修改之一,即我不想提交到svn存储库,是一个已更改的数据库连接字符串.没有额外的"藏匿"步骤,保持本地更改的最方便方法是什么?

我怀疑像"藏匿"或"被子"这样的东西是我正在寻找的东西,但我仍然是新的足够git我认为我缺少一些会导致确切咒语的术语.

更新:我发现似乎避免git stash+ git-svn action+ git stash apply系列的唯一解决方案是手动更新git-svn ref:

(check in local-only change to 'master', then...)
$ cat .git/refs/master > .git/refs/remote/git-svn
$ git svn fetch (with at least one new SVN revision)
Run Code Online (Sandbox Code Playgroud)

这使得本地专用提交成为两个svn修订版之间的一个奇怪的(可能是不安全的)提交.

git git-svn git-stash quilt

5
推荐指数
1
解决办法
304
查看次数

如何防止git svn rebase创建空目录

简而言之,问题是,当我运行git svn rebase时,我得到了一堆"创建空目录:..."

在svn端,在trunk中,有一个名为TOD(Trunk Only Dir)的目录,里面有很多文件.在另一个分支中,根本就没有这样的目录.

当我使用git svn克隆这个svn存储库时,在master上就可以了,但是在分支上,我得到了TOD目录和相同的目录结构,除了它没有文件.

如果我是TOD目录(安全,因为git不跟踪目录),并切换到master并运行git svn rebase,我得到了"创建空的direcotry"消息,然后当我签出分支时,TOD目录返回.

总而言之,问题是,如何防止git svn在分支上创建空的TOD目录?

directory git-svn

5
推荐指数
1
解决办法
1036
查看次数

使用Git SVN和具有多个用户的远程Git存储库的工作流程

问题摘要:

当我写出来时,我开始意识到有很多细节,所以这里是标题:

  • 对于在工作环境中使用SVN和Git SVN的许多用户的团队而言,什么是良好的工作流程,但是也希望使用远程Git Repo(BitBucket)从工作环境外部访问相同的代码,共享更改到这个代码在办公室之外彼此之间,然后在回到办公室后安全地重新回到SVN?其他人继续在办公室内使用Git SVN吗?

在写这篇文章时,我也意识到我要求做的事情真的很复杂,可能根本就不可能......

细节:

我和使用SVN存储库的人员一起工作.我们中的许多人已经开始使用Git SVN,现在正在收获本地使用Git的好处,随意分支,必要时合并到我们的本地Masters,然后再回到SVN.这很好用(尽管我意识到我们并没有从纯粹的Git解决方案中获得所有好处).

我最近开始使用私有BitBucket Git存储库作为Master的远程控制器,因此我可以轻松地将代码传输到其他地方或从其他地方传输代码.工作流程如下:

  • 在工作中,来自SVN Trunk的Rebase => Local Work Master.
  • 从Local Work Master推送=> BitBucket Master.
  • 在家里,从BitBucket Master => Local Home Master拉出来.
  • 在家编码,分支,合并,享受git.
  • 从当地家庭分支合并=>本地家庭主人.
  • 从Local Home Master推送=> BitBucket Master.
  • 在工作中,从BitBucket Master拉到Local Work Master.
  • 重新启动SVN Trunk.
  • 向SVN致敬.

好的,有几个步骤,但它适合我.但是,我的一些同事想要开始做同样的事情.更重要的是,我们希望能够在没有阻碍SVN的情况下使用我们的BitBucket Git仓库.

我们正在考虑的各种事情的一些例子:

  • 如果我们其中一个人不在办公室,他们希望能够获得最新的代码.在工作中,我可以从SVN重新定位,然后推送到BitBucket,将最新的代码提供给我的同事.
  • 如果我们两个人想要分享一些变化(假设我们中的一方或两方都不在办公室),我们可以在BitBucket上为此创建一个功能分支,每次推送都会根据需要进行推送.
  • 当我们对它感到满意时,我们中的一个人可以将它合并到我们的Local Home Master中,然后推送到BitBucket Master,准备好在我们重新开始工作时拉动.
  • 回到工作岗位后,我们中的一个人可以将Master从BitBucket拉到我们的本地工作大师,然后像往常一样对SVN进行反驳并提交.

但是,假设我们中的一个人已经这样做了,那么团队的其他成员会发生什么呢?如果他们从BitBucket Master中撤出,他们将获得更改.但是,如果他们退出SVN,他们也会得到改变.

如果两者同时会发生什么?这只是一个可能的障碍.我可以想到其他一些步骤,这些都可能陷入真正的混乱.

不幸的是,我们的持续集成工作流程与SVN相关,其他业务也是如此.因此,我们实际上没有选择完全转移到Git.我们也无法从公司外部访问我们的SVN存储库.

svn git workflow git-svn multiple-users

5
推荐指数
1
解决办法
1272
查看次数

GitHub for Windows:如何取消设置svn-remote.svn.url

从我本地仓库的路径的cmd行,我执行了git svn clone命令但是使用了错误的URL.

然后我尝试git svn clone用正确的url 执行,但我不能,因为它告诉我"svn-remote.svn.url already set"

我该怎么svn-remote.svn.url办?

svn git github git-svn github-for-windows

5
推荐指数
2
解决办法
6521
查看次数

Git SVN可以运行svn mergeinfo --show-revs符合条件

我正在使用SVN并拥有稳定的生产分支和不稳定的主干.对于每个版本,我们都会从主干中选择要合并到生产中的项目.

我用git svn克隆了我的SVN repo,这样我就可以利用更快的搜索需要合并的提交(因为我在提交消息中搜索JIRA id).但是,我仍然在最后使用svn merge进行合并.

这个长期存在的生产分支的一个问题是,在主干中可能会有未提交合并的提交.

为了解决这个问题,我偶尔会跑:

svn mergeinfo --show-revs eligible https://my.server/svn/trunk https://my.server/svn/branches/PROD_V3.00

但是,这真的很慢.git中的等价物是

git log prod..master

但是,这似乎只列出了所有提交.

这是由于git无法识别svn合并和svn:mergeinfo属性吗?

有没有办法让我快速使用git获得符合条件的提交?

编辑:

我试过Joes回答,然而,git cherry只输出SHA,我需要SVN修订版来进行合并.因此,我不得不通过它git svn find-rev来找到SVN ID以获得我需要的东西.

git cherry prod master|cut -d' ' -f2|while read -r line; do git svn find-rev "$line"; done;

不幸的是,这比慢svn mergeinfo --show-revs eligible.

svn git git-svn

5
推荐指数
1
解决办法
601
查看次数

git合并任意基本修订版(git-svn)

我正在使用git-svn对我公司的Subversion存储库进行离线开发,Subversion存储库是项目的记录存储库.为了实现管理可见性,我需要在SVN中维护我的功能分支.有时我需要在分支的生命周期内多次将来自主干的更改合并到功能分支.由于我需要在SVN中保持分支最新,我必须合并; 一旦他们被推向SVN,我就无法重新提交.此外,git svn dcommit从合并提交中删除第二个父级.这意味着在第一次git merge将分支根标识为合并基础而不是最近的合并父级之后的合并.因此,它尝试重新合并已经合并的更改,这几乎可以保证令人讨厌的冲突.

当我合并SVN时,我手动指定基本修订:

svn merge -r 49262:49608 $svn/trunk
Run Code Online (Sandbox Code Playgroud)

有没有办法让git与手动指定的基本修订版合并?

更新:

请注意,我需要指定两个修订版本,包括基本版本和父版本.我有一个历史

trunk: A -- B -- C -- D -- H -- I
             \         \
    feature:  E -- F -- G -- J -- K
Run Code Online (Sandbox Code Playgroud)

git svn dcommit已删除G和之间的父关系D.我需要运行的合并IK同一个基地D.简单地跑

$ git checkout feature
$ git merge trunk
Run Code Online (Sandbox Code Playgroud)

将尝试合并IK基础B而不是D,重新应用CD导致极端合并冲突.使用SVN,我会运行一个命令

$ svn …
Run Code Online (Sandbox Code Playgroud)

git version-control merge git-svn git-merge

5
推荐指数
1
解决办法
731
查看次数

为什么`git-svn`挂在`找到可能的分支点:`

由于几天,我git-svn挂在Found possible branch point: .../trunk => .../branches/foo, 8809当我这样做git svn fetch.

克隆实际上163671已经进行了修订.我的盒子最近冻结了,所以它可能会git svn fetch在它冻结的时候卡住了我不得不重新启动我的Windows机器.

我试图移开.git/svn/git svn恢复,但它只是重建trunk和其他一些,然后再次挂在完全相同的位置.

有没有人知道它为什么会突然挂在那里以及如何恢复除了需要一周左右的新git svn克隆.我更愿意,如果有另一种方式.

svn git version-control git-svn svn2git

5
推荐指数
1
解决办法
547
查看次数

git svn克隆卡在perl.exe上

我已经执行了命令(Windows 10,Git BASH):

$ git svn clone <svn app-url>/trunk
Initialized empty Git repository in C:/TEMP/svn-git/trunk/.git/
Run Code Online (Sandbox Code Playgroud)

然后卡住。没有更多的日志,什么都没有。

我唯一看到的是perl.exe正在使用资源负载:

使用大量处理器的perl.exe

我已经在同一网络中的其他Windows PC上尝试了相同的命令,并且运行良好-开始从r100等获取所有修订,并在大约一个小时内完成,而没有出现问题。

我应该对此耐心吗?

svn windows git perl git-svn

5
推荐指数
1
解决办法
289
查看次数