zoukankan      html  css  js  c++  java
  • git svn

    http://chucklu.github.io/Blog/2014/12/24/git-svn.html

    如何使用git和TortoiseGit来操作svn的版本库

    1.首先clone svn的版本库,使用此命令git svn clone https:// ,如果是比较大的版本库的话,会耗时比较久

    2.修改.gitinfoexclude文件,进行忽略文件的设置 比如 bin/ obj/ *.suo *.user

    3.对代码做出修改,然后可以使用TortoiseGit的右键菜单,svn dcommit 会提示按照什么风格进行提交代码(这个有待测试)

    4.如果有其他人修改了代码,并提交到svn上,需要用TortoiseGit的右键菜单svn fetch,然后立即使用svn rebase (如果只fetch的不rebase的话,查看日志的时候,是看不到fetch下来的代码的)

    新增说明

    git svn clone结束的时候,会自动压缩文件,但是压缩会失败。 所以在git svn clone,开始一小会之后,可以ctrl+c打断命令的执行。

    然后修改.git文件夹下的config文件 在  下面新增两行,主要是用来限制压缩文件的大小的

    [core]

    packedGitLimit = 128m

    packedGitWindowSize = 128m

    再添加以下代码

    [pack]

    deltaCacheSize = 128m

    packSizeLimit = 128m

    windowMemory = 128m

    另外有时候git svn fetch执行会卡住,有可能是内存不足的原因。切换到git bash执行此命令,并且关闭其他所有程序。确保git可以拉取svn的代码。之后不要忘记svn rebase

    在git svn clone的时候直接同步分支以及Tag  -T -b -t参数

    git svn clone file:///tmp/test-svn -T trunk -b branches -t tags

    http://stackoverflow.com/questions/3239759/checkout-remote-branch-using-git-svn 从svn的服务器拉取完整代码以及切换分支的方法

    Standard Subversion layout

    Create a git clone of that includes your Subversion trunk, tags, and branches with

    git svn clone http://svn.example.com/project -T trunk -b branches -t tags

    The --stdlayout option is a nice shortcut if your Subversion repository uses the typical structure:

    git svn clone http://svn.example.com/project --stdlayout

    Make your git repository ignore everything the subversion repo does:

    git svn show-ignore >> .git/info/exclude

    You should now be able to see all the Subversion branches on the git side:

    git branch -r

    Say the name of the branch in Subversion is waldo. On the git side, you'd run

    git checkout -b waldo-svn remotes/waldo

    The -svn suffix is to avoid warnings of the form

    warning: refname 'waldo' is ambiguous.

    To update the git branch waldo-svn, run

    git checkout waldo-svn
    git svn rebase

    Starting from a trunk-only checkout

    To add a Subversion branch to a trunk-only clone, modify your git repository's .git/config to contain

    [svn-remote "svn-mybranch"]
            url = http://svn.example.com/project/branches/mybranch
            fetch = :refs/remotes/mybranch

    You'll need to develop the habit of running

    git svn fetch --fetch-all

    to update all of what git svn thinks are separate remotes. At this point, you can create and track branches as above. For example, to create a git branch that corresponds to mybranch, run

    git checkout -b mybranch-svn remotes/mybranch

    For the branches from which you intend to git svn dcommit, keep their histories linear!


    Further information

    You may also be interested in reading an answer to a related question.

    ===2015年09月27日更新===

    git详解之八 git与其他系统  http://www.open-open.com/lib/view/open1328070454218.html

    Git-Svn 总结

    git svn 工具集在当前不得不使用 Subversion 服务器或者开发环境要求使用 Subversion 服务器的时候格外有用。不妨把它看成一个跛脚的 Git,然而,你还是有可能在转换过程中碰到一些困惑你和合作者们的迷题。为了避免麻烦,试着遵守如下守则:

    • 保持一个不包含由 git merge 生成的 commit 的线性提交历史。将在主线分支外进行的开发通通衍合Rebase回主线;避免直接合并。
    • 不要单独建立和使用一个 Git 服务来搞合作。可以为了加速新开发者的克隆进程建立一个,但是不要向它提供任何不包含 git-svn-id 条目的内容。甚至可以添加一个pre-receive 挂钩来在每一个提交信息中查找 git-svn-id并拒绝提交那些不包含它的 commit。

    如果遵循这些守则,在 Subversion 上工作还可以接受。然而,如果能迁徙到真正的 Git 服务器,则能为团队带来更多好处。

    建立2个分支,一个叫svn,另外一个叫local

    svn分支,就是上面说的主线分支,[用于和svn服务器同步]

    在local上进行代码开发,开发完成以后,按照以下步骤处理

    1.首先切换到 svn分支,git svn rebase更新服务器上的svn代码

    这时,会有2种情况

    情况1

    svn服务器上没有更新代码,那么此时,只要把local分支的修改,直接fast forward合并到svn分支就可以了

    情况2

    svn服务器上更新了代码,那么同步代码之后,就要local分支上的代码弄到svn分支上

    (1)切换到local分支,git rebase svn

    处理完之后,local分支看起来就像是在svn分支上直接开发的一样     【其实这里也可以直接git svn dcommit,然后切换到svn分支,再同步代码。最后再切回local分支继续开发】

    (2)然后切换到svn分支,git merge local进行快速合并

    (3)最后,在svn分支上,git svn dcommit

    local分支做了一次最新的提交

    svn分支使用git svn rebase同步了svn服务器上的代码

    现在需要切换到local分支,然后使用git rebase svn;使得local的开发,看起来像是直接从svn分支的最后一个commit开始

    右键菜单,tortoisegit-->rebase

    出现冲突需要处理,local的指向暂时没有改变。但是working dir changes

     

    同时维护svn和git的策略:

    优先向svn服务器进行git svn dcommit

    然后才可以向git服务器进行git push,否则会导致git和svn不在一条直线上

     如何查看svn版本库对应的信息

    git svn info

    Path: .
    URL: https://server2008/svn/ZBMSH/Hardware/zbm_core_fpga/trunk/Software/ZBM%20St
    udio
    Repository Root: https://server2008/svn/ZBMSH
    Repository UUID: fa437c58-89a3-0d4c-9098-8bc72d4331b5
    Revision: 2653
    Node Kind: directory
    Schedule: normal
    Last Changed Author: lujuntaozbm
    Last Changed Rev: 2653
    Last Changed Date: 2016-05-18 14:43:47 +0800 (Wed, 18 May 2016)

    2016年07月29日

    C:Program Files (x86)Gitetcgitconfig

    svn的中文路径的支持设置

    [svn]
    pathnameencoding = utf-8

    https://gitlab.com/tortoisegit/tortoisegit/issues/2811

    The svn-remote has no fetch entry. TortoiseGit requires it. 

    $ git svn init -s https://server2008/svn/ZBMSH/Hardware/Software/zbm_studio/trunks --prefix=origin/
    Initialized empty Git repository in D:/Hardware/Test/.git/
    Using higher level of URL: https://server2008/svn/ZBMSH/Hardware/Software/zbm_studio/trunks => https://server2008/svn/ZBMSH/Hardware/Software/zbm_studio

     关于svn地址的获取,不要从浏览器获取。否则从浏览器中获取的url是错误的。

    例如

    在tortoisesvn中查看的地址是http://172.31.212.138/svn/LISA/05.releases/LISA_5.0.0.0/beta   
    但是浏览器中最终转换成了http://172.31.212.138/!/#LISA/view/head/05.releases/LISA_5.0.0.0/beta

  • 相关阅读:
    51nod 1081 子段求和
    51nod 1085 背包问题
    51nod 1012 最小公倍数LCM
    51nod 1046 A^B Mod C
    51nod 1057 N的阶乘
    死锁 必然
    two-sum
    一些基本定义
    常用命令
    python_99_面向对象多态
  • 原文地址:https://www.cnblogs.com/chucklu/p/3805969.html
Copyright © 2011-2022 走看看