关于oschina-git、Git、Svn的使用

Home

关于Gitee

Gitee 是开源中国社区团队基于开源项目 GitLab 开发的在线代码托管平台。

每一个Gitee 账号可创建 1000 个项目,不限公有或私有项目,并已宣布代码托管服务永久免费

Gitee 的功能

Gitee 除了提供最基础的 Git 代码托管之外,还提供代码在线查看、历史版本查看、Fork、Pull Request、打包下载任意版本、Issue、Wiki 等方便管理、开发、协作、共享的功能,具体请查看帮助

意见和建议

在您使用 Gitee 的过程中有任何意见和建议,请到此项目提交Issue,我们的开发者会在这里跟您沟通。

帮助

在使用 Gitee 的过程中有任何不明白的问题,可以查阅码云帮助文档查看帮助说明,也欢迎您到开源中国社区上提问,也可以加入我们开源中国官方Git交流群:515965326。

Git 版本控制入门

如果你不熟悉Git,点此查看权威Git书籍 ProGit(中文版),新手老鸟均适合。

Git参考手册:http://gitref.org/zh/index.html

Git官网:http://git-scm.com

Git客户端下载地址: 官方GitTortoiseGitSourceTree

Git 手机APP下载地址:点击这里

Git手册:http://git-scm.com/docs

网友整理的码云教程,请查看这里

一份很好的 Git 入门教程,点击这里查看

Git快速入门(gif动画版),点击这里查看

码云 快速使用

以下步骤以 oschina/git-osc 仓库为例子,在您使用 Gitee 的过程中,具体链接地址请填写对应的仓库地址。

  • 快速设置:

    如果您知道该怎么操作,直接使用下面的地址:

    https://gitee.com/oschina/git-osc.git  
    git@gitee.com:oschina/git-osc.git  
    

我们强烈建议所有的 Git 仓库都有一个README,LICENSE,.gitignore文件。
Git入门?查看 帮助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何连接本站, 如何导入项目

  • 简易的命令行入门教程:
    1. Git 全局设置:

      # 用户名和邮箱需要填写您在 码云 对应的用户信息
      git config --global user.name "username"
      git config --global user.email "user email"
      
    2. 在 码云 新建一个仓库,我们以 oschina/git-osc为例

    3. 在本地创建 Git 仓库:

      # git remote add 应添加您对应的仓库地址,可为 HTTPS 或 SSH
      mkdir git-osc  
      cd git-osc  
      git init  
      touch README.md  
      git add  README.md  
      git commit -m 'first commit'
      git remote add origin https://gitee.com/oschina/git-osc.git  
      git push -u origin master
      
    4. 如果您在本地已经有需要上传到 码云 的项目,那么您需要执行如下命令:

      cd existing_git_repo
      git remote add origin https://gitee.com/oschina/git-osc.git
      git push -u origin master
      

FAQ

这里列出有关中国源代码托管平台有关的最常被问到的问题,以及其问题的解答。

问:为什么推送的时候大文件推不上去?

答:Gitee 单个仓库限制为1G,单个文件限制100M。

问:为什么不能修改个性后缀?

答:个性后缀会作为您项目地址的一部分,这个地址是要配置在您的本地仓库中的,如果修改个性后缀,您的本地项目地址也会更改,而且所有使用这个项目的人的本地项目地址都要更改,非常不便。因为这样的原因,我们不提供自助修改个性后缀的功能,请您在注册的时候谨慎填写。

问:为什么代码托管平台的密码跟开源中国的密码不一致?

答:代码托管平台与开源中国目前是两套用户系统,独立运行。您必须在注册的过程中,填写一些必要信息,包括密码,该密码跟开源中国没有关系,用来登录代码托管平台,以及使用http方式访问代码仓库时验证身份。后期将计划整合开源中国的现有用户系统,但到目前为止还是两套。

问:为什么公有项目无法转换为私有项目?

答:项目一旦公开,即被认为是源码已经公开,已经泄漏,再转为私有项目无意义。所以请您在创建项目的时候仔细选择。

问:为什么我的项目是XX语言,却被识别为YY语言?

答:对于公有项目,我们后台服务每隔一段时间,执行一次编程语言探测,但毕竟是机器探测,难免有误,我们会尽力使探测结果更准确,但一旦出现错误,您可以在项目设置页面手动指定项目的编程语言。

问:为什么有的项目不能提交Issue、Pull Request?

答:项目的所有者可以设置项目是否接受Issue和Pull Request。

问:为什么私有项目不可以Star、Watch?

答:私有项目被设置为只有项目组内成员可见,项目组内成员默认Watch该项目,即项目组内成员可以查看到该项目的所有动态。Star、Watch属社交化编程范畴,对于私有项目也没有意义。

问:为什么在push的时候,出现了413错误,push失败?

答:为了提供更稳定更快的服务,我们的http服务器nginx设置了单次上传大小限制为200M,如果您的单次push超过200M,将被服务器拒绝,返回413错误。遇到这种问题,可以在https://gitee.com 页面上传SSH公钥,通过SSH通道push即可。

问:为什么我收不到激活/通知/重置密码等邮件?

答:本站采用SendCloud服务发送邮件,我们尽力保证邮件快速送达,但是发送邮件仍然可能会有延迟,正常情况下都可以在10分钟内收到邮件,如果你没有收到邮件,可查看是否被识别为垃圾邮件,如果垃圾邮件中仍然没有,可通过建议,或者在开源中国社区上告知我们。

Git-使用常见问题

1、我应该如何合并冲突?

冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并

如我这边执行git pull origin master

如果Git能够自动合并,那么过程看起来是这样的

输入图片说明

拉取的时候,Git自动合并,并产生了一次提交。

如果Git不能够自动合并,那么会提示

输入图片说明

这个时候我们就可以知道README.MD有冲突,需要我们手动解决,修改README.MD解决冲突

输入图片说明

可以看出来,在1+1=几的这行代码上产生了冲突,解决冲突的目标是保留期望存在的代码,这里保留1+1=2,然后保存退出。

输入图片说明

退出之后,确保所有的冲突都得以解决,然后就可以使用git add . git commit -m "fixed conflicts" git push origin master即可完成一次冲突的合并。

整个过程看起来是这样的

输入图片说明

License

开源许可证的一些介绍

Apache v2 License

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

  1. 需要给代码的用户一份Apache Licence
  2. 如果你修改了代码,需要再被修改的文件中说明。
  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

MIT License

MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称「X条款」(X License)或「X11条款」(X11 License)

MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软体被授权人更大的权利与更少的限制。

被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软体及软体的副本。

被授权人可根据程式的需要修改授权条款为适当的内容。

在软件和软件的所有副本中都必须包含版权声明和许可声明。

此授权条款并非属copyleft的自由软体授权条款,允许在自由/开放源码软体或非自由软体(proprietary software)所使用。

此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。

MIT条款可与其他授权条款并存。另外,MIT条款也是自由软体基金会(FSF)所认可的自由软体授权条款,与GPL相容。

GPL v2

GPL 是GNU通用公共许可协议(GNU General Public License)的简称,我们很熟悉的 Linux 和 Git 就是采用了 GPL,该协议力图保障你分享和修改某程序全部版本的权利——确保自由软件对其用户来说是自由的。

所谓自由软件,强调自由,而非免费。GNU通用公共许可协议设计用于确保你享有分发自由软件的自由(你可以为此服务收费),确保你可以在需要的时候获得这些软件的源码,确保你可以修改这些软件或者在新的自由软件中复用其中某些片段,并且确保你在这方面享有知情权。

自由权利包括复制、分发和修改。源码是指所有修改作品及生成、安装、运行(对可执行作品而言)目标码所需的源码,包括控制上述行为的脚本,但其中不包括系统库、通用工具。

简而言之,如果你分发自由软件的副本,那么副本中必须包含许可协议和版权声明,并确保接收者能够获取到该副本的源代码及其依赖库的源码。

Artistic License 2.0

Artistic License,又称艺术许可协议(英语:Artistic License),通常指最初的艺术许可协议(1.0版),是一个自由软件授权条款,主要用在官方发布的Perl解释器和大部分CPAN模块的授权。原始的艺术许可协议是由Perl的创始人Larry Wall编写发布的。

BSD 2-Clause license

BSD允许使用者修改和重新发布代码(以其他协议形式),允许闭源商业发布和销售。

BSD鼓励代码共享的同时,要求尊重代码作者的著作权。

使用BSD协议,需要遵守以下规则:

  1. 再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议;
  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档那个和版权声明中包含原来代码中的BSD协议。

Affero GPL

是一个广泛被使用的自由软件特许条款,最初由Affero, Inc撰写。此特许条款最新版本为“第3版”(v3),2007年11月发布。Affero 通用公众特许条款是改自GNU通用公众特许条款,并加入额外条款,其目的是为了Copyleft条款应用于在网络上运行的应用程式(如Web应用),从而避免有人以应用服务提供商方式逃避GNU通用公众特许条款。

LGPL v2.1

LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

BSD (3-Clause) License

BSD允许使用者修改和重新发布代码(以其他协议形式),允许闭源商业发布和销售。

BSD鼓励代码共享的同时,要求尊重代码作者的著作权。

使用BSD协议,需要遵守以下规则:

  1. 再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议;
  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档那个和版权声明中包含原来代码中的BSD协议;
  3. 不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广。

Eclipse Public License v1.0

EPL允许使用者任意使用、复制、分发、传播、展示、修改以及改后闭源的二次商业发布。

使用EPL协议,需要遵守以下规则:

  1. 当一个代码贡献者将源码的整体或部分再次开源发布的时候,必须继续遵循EPL开源协议来发布,而不能改用其他协议发布.除非你得到了原“源码”拥有者的授权;
  2. EPL协议下,你可以将源码不做任何修改来商业发布.但如果你要发布修改后的源码,或者当你再发布的是二进制文件的时候,你必须声明它的源代码是可以获取的,而且要告知获取方法;
  3. 当你需要将EPL下的源码作为一部分跟其他私有的源码混和着成为一个Project发布的时候,你可以将整个Project/Product以私人的协议发布,但要声明哪一部分代码是EPL下的,而且声明那部分代码继续遵循EPL;
  4. 独立的模块(Separate Module),不需要开源。

LGPL v3

相对于LGPL v2,不仅要求用户公布修改的源代码,还阻止了其他一些私有化的方式,例如:不得将产品内的软件“tivo化”或“锁定”,或者(用行业内的话来说)“安全启动”,也就是说,不得以任何形式阻止用户修改产品内的以 GPL 许可协议发布的软件。

Mozilla Public License Version 2.0

MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对 源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)。但是,相比而言MPL还有以下几个显著的不同之处:

  • MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL 许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL 许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个 豁口。
  • MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。
  • 对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是 专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
  • 对源代码的定义
    而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择 取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始 源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”
  • MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。

GPL v3

GPL v3与GPL v2类似。区别在于,不仅要求用户公布修改的源代码,还阻止了其他一些私有化的方式,例如:不得将产品内的软件“tivo化”或“锁定”,或者(用行业内的话来说)“安全启动”,也就是说,不得以任何形式阻止用户修改产品内的以 GPL 许可协议发布的软件。

Public Domain

Public Domain 是人类的一部分作品与一部分知识的总汇,可以包括文章、艺术品、音乐、科学、发明等等。对于领域内的知识财产,任何个人或团体都不具所有权益(所有权益通常由版权或专利体现)。这些知识发明属于公有文化遗产,任何人可以不受限制地使用和加工它们(此处不考虑有关安全、出口等的法律)。创立版权制度的初衷是借由给予创作者一段时期的专有权利作为(经济)刺激以鼓励作者从事创作。当专有权利期间届止,作品便进入公有领域。公有领域的作品由于没有专属权利人,因此公众有权自由使用它们。

WebHook-使用简介

简介:

Git@OSC钩子功能(callback),是帮助用户push了代码后,自动回调一个您设定的http地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序(比如发邮件,自动部署等);目前,webhook支持5种触发方式,支持复选,如图:
输入图片说明
其中,Push是指您的项目被您或者该项目的开发者push了代码,Tag Push 是指您新建了tag,Issue是指您的项目创建、更改内容、关闭、重新打开issue,评论是指任何用户在您的issue下发表了评论,合并请求是指您的项目被人提交了Pull Request。

说明:

  • 请求的方式为POST请求
  • 格式为Json
  • 超时为5秒(如果程序工作时间较长,建议异步操作。)

Post数据

为了保证安全以及识别数据来源,我们会在post数据中附带您创建hooks时填写的密码,请注意,该密码是明文

如何创建WebHook

关于创建,在项目页面点击管理然后点击图中红色框中部分,如图:

输入图片说明

然后再图中所示的地方填写post数据接收的地址以及密码:

输入图片说明

请注意,一定要保证填写的地址是可以访问的,密码也是必须的,不然无法创建成功,如果一切都正常,你将会在刷新后的本页面看到一个类似的东西

输入图片说明

这样你就创建好了一个WebHook

数据格式

Push的Hook发送的数据类似于:

hook=
{
    "password": "hod20x4hnkecy63", 
    "hook_name": "push_hooks", 
    "push_data": {
        "before": "26c9fb3533d1c63e3b822d58a8831b1caf6d9cd7", 
        "after": "219aa13d45276a5cae7436ecc66053da67ec2a2d", 
        "ref": "refs/heads/master", 
        "user_id": 449815, 
        "user_name": "gitlabu6d4bu8bd5u8d26u53f72", 
        "user": {
            "id": 449815, 
            "email": "gitlabtest_2@gitlab.com", 
            "name": "gitlabu6d4bu8bd5u8d26u53f72", 
            "time": "2015-11-06T14:51:55+08:00"
        }, 
        "repository": {
            "name": "test_gitosc_20151106145021322", 
            "url": "git@git.oschina.net:gitlab_test_1/test_gitosc_20151106145021322.git", 
            "description": "test_gitosc_20151106145021322 testting", 
            "homepage": "http://git.oschina.net/gitlab_test_1/test_gitosc_20151106145021322"
        }, 
        "commits": [
            {
                "id": "219aa13d45276a5cae7436ecc66053da67ec2a2d", 
                "message": "commit_access_test", 
                "timestamp": "2015-11-06T14:50:47+08:00", 
                "url": "http://git.oschina.net/gitlab_test_1/test_gitosc_20151106145021322/commit/219aa13d45276a5cae7436ecc66053da67ec2a2d", 
                "author": {
                    "name": "gitlab_test_2", 
                    "email": "gitlabtest_2@gitlab.com", 
                    "time": "2015-11-06T14:50:47+08:00"
                }
            }
        ], 
        "total_commits_count": 1, 
        "commits_more_than_ten": false
    }
}

Tag Push的push数据类似于:

hook=
{
    "password": "25b3pzwtxwu8as9", 
    "hook_name": "tag_push_hooks", 
    "push_data": {
        "ref": "refs/tags/pke1de6qpjbwpz9", 
        "before": "00000000", 
        "after": "1b0355de43a8e24ef59baa4557d4617732ed1d1b"
    }
}

Issue的push数据类似于:

hook=
{
    "password": "671vmti2lkhmmqv", 
    "hook_name": "issue_hooks", 
    "push_data": {
        "id": 361909, 
        "title": "x2tf25k8p0nrkoj", 
        "state": "closed", 
        "assignee": null, 
        "milestone": null
    }
}

评论的push数据类似于:

hook=
{
    "password": "e7i6y15rji72sof", 
    "hook_name": "note_hooks", 
    "push_data": {
        "id": 212599, 
        "note": "_u72b6u6001u66f4u6539u4e3a **u5df2u5173u95ed**_", 
        "noteable_type": "Issue", 
        "noteable_id": 361909, 
        "author": {
            "id": 449814, 
            "user_name": "gitlab_test_1", 
            "email": "gitlabtest_1@gitlab.com"
        }
    }
}

合并请求的push数据类似于:

hook=
{
    "password": "feds3os4h2f8s4k", 
    "hook_name": "merge_request_hooks", 
    "push_data": {
        "id": 15339, 
        "project": {
            "project_id": 616834, 
            "project_name": "test_gitosc_20151106145021322"
        }, 
        "target_branch": "master", 
        "source_repo": {
            "project_id": 616836, 
            "project_name": "test_gitosc_20151106145021322"
        }, 
        "source_branch": "master", 
        "author": {
            "id": 449815, 
            "user_name": "gitlab_test_2", 
            "email": "gitlabtest_2@gitlab.com"
        }, 
        "title": "pull_request_test", 
        "body": "####################"
    }
}

以上就是5种钩子触发时推送的数据范例,为便于理解和使用,以上数据全部经过json化。另,本wiki中范例数据仅供参考,请以实际收到的数据以及格式为准。

Why-Blocked

为什么屏蔽 SSH 方式操作仓库?

答:大量有规律的重复性的 SSH 的方式操作仓库会被屏蔽掉,一般情况下是因为用户使用脚本进行重复的更新代码达到自动部署的需要,这种情况应该使用我们所提供的WebHooks钩子进行自动触发部署脚本。

如何解封?

答:请去除违规操作后,发送邮件至git@oschina.cn进行申请解封,请详细说明被封的具体情况。

使用-Subversion-接入码云

很高兴的告诉大家,现在 码云 目前支持使用 Subversion 对仓库进行操作了。

使用前注意

  1. 仓库体积超过 300 MB 不建议使用 Subversion 操作仓库,存储库容量达到 400 MB,或者 300 MB 并且存储大量非文本数据时,我们将关闭仓库的 Subversion 支持。
  2. 由于 GIT 不支持空目录的提交,在存储机器上,无论是普通仓库还是开启 Subversion 接入的仓库存储时都是 GIT 仓库,Subversion 的 commit 是提交到 git 仓库上的,所以码云的 Subversion 不支持空目录的提交。
  3. 第一次开启 Subversion, 操作一个仓库,如果仓库体积较大或者提交次数较多,由于缓存的缘故,响应时间会比较长。
  4. 不支持 Subversion 的 Hook 机制,请使用 WebHook 替代。
  5. Subversion 属性不完全支持。
  6. 客户端需要开启 SASL 支持,不支持的客户端无法访问。
  7. 部分 svn 命令不支持。可以查看 Subversion 客户端的兼容性
  8. 版本号的映射,目前 Subversion 的版本号计算依据为本分支所有的commit 数目减一 不包括 merge ,如果使用了在 git 中强制回退等操作,请重新检出。

WARNING:

由于 git 在设计上就没有考虑空文件 Kernel.org: Git FAQ

我们设计的原则就是不破坏,不主动修改用户的仓库,我们的后端存储的完全是一个 git 仓库,如果我们添加了,一次提交内容也不会一致了,建议你在添加目录的时候添加 .keep 之类的占位文件,空文件即可。

关于改版

Subversion 功能的最终解释权归 OSChina.NET 所有。Subversion 接入的规则可能在下一次改版中发生改变。

开启方式

在项目的设置界面开启

[图片上传失败...(image-a0a115-1534921181413)]

如果是空仓库:

emptyrepo

使用指南

码云 支持的是 svn 协议。 对于 svn 而言,获取一个仓库的代码通常是 checkout,在项目主页我们通常可以获得 URL:
[图片上传失败...(image-a21485-1534921181413)]
这个仓库地址为:

svn://git.net/svnserver/newos

1.获取仓库代码:

svn checkout svn://git.net/svnserver/newos newos

使用上述命令,我们将得到项目默认分支的代码。并将本地的工作目录命名为 newos
如果最后不带 newos,svn 默认把本地工作目录命名为 SVN-URL 的最后一个目录名,这里是 newos

svn checkout svn://git.net/svnserver/newos

如果要获得任意分支代码,请输入近似如下的命令:

svn checkout svn://git.net/svnserver/newos/branches/update newosupdate

特别的说明,获取主干分支,也就是 master 分支可以使用下面的分支格式

svn checkout svn://git.net/svnserver/newos/trunk newos

svn trunk 分支对应 master 分支 用户应当尽量不使用下面格式

svn checkout svn://git.net/svnserver/newos 

操作说明

如果部分检出仓库,并且仓库根目录下包含 branches/tags/trunk 这样的目录,请使用完整的路径 layout,如下:

svn://git.net/example/example/trunk/tags/hello
svn://git.net/example/example/branches/dev/trunk
svn://git.net/example/example/branches/dev/branches 

如果没有 master 分支,也就没有 trunk 分支,检出的 URL 不能省略分支名。比如只有一个 dev 分支,必须使用下列格式,否则会提示仓库不存在。

svn co svn://git.net/svnserver/newos/branches/dev  svnserver_dev  

打开终端,输入上述命令,出现以下下面提示。其中第一个认证领域是用户的密码,这个可以留空。而用户名是用户在 码云 登陆时使用邮箱地址。密码则是用户登陆 码云 所使用的密码
一般而言,svn 会加密缓存用户的用户名密码,所以,对仓库的操作只需要第一次输入用户邮箱和密码。
清除密码缓存,用户目录下的 .subversion/auth/svn.simple 文件夹下的文件。

[图片上传失败...(image-941f89-1534921181413)]

下图则是成功的拉取了项目代码。

[图片上传失败...(image-485dfd-1534921181413)]

查看本地工作目录信息:

svn info

[图片上传失败...(image-43e8c5-1534921181413)]

cd helloworld
echo "#SVN Options ReadMe.md">SVNReadMe.md
#svn add SVNReadMe.md
#svn add * --force类似于git add -A
svn add * --force
svn update .
svn commit -m "first svn commit"

Subversion 在提交前建议先使用 svn update 更新工作拷贝。也就相当于 git pull 后再 git push。
Subversion 的提交是在线的,如果机器已经离线,那么提交会失败,这个过程用git的方式理解就是 git commit+git push。
用户使用 svn 提交代码同样会有动态显示。

列出版本库中的目录内容:

svn list svn://git.net/svnserver/newos/trunk

导出仓库指定分支的所有文件,不含版本控制信息:

svn export svn://git.net/svnserver/newos/trunk newos

备注

安装 Subversion 客户端

在 Apache 基金会的 Subversion 官网:
http://subversion.apache.org
二进制下载提示页面:
http://subversion.apache.org/packages.html

Windows 系统:

与资源管理起集成的 SVN 客户端:TortoiseSVN,通常被叫做"海龟",为 msi 安装包。可以使用 ExtractMSI 解压缩。
很诡异的是,在 Apache 上并没有推荐 TortoiseSVN。
另外还有 SlikSVN,下载地址:https://sliksvn.com/download/
其他的也就不一一介绍了。

Linux 系统

一般而言 Linux 系统自带的包控制软件能够安装 Subversion,如果版本低于1.8,就建议用户下载预编译的二进制或者自己动手编译 Subversion。这里不做过多说明。

OS X

XCode 自带的 Subversion 版本为1.7.x,太老,而 码云 只支持1.8以上的 SVN 客户端。
如果安装了 Homebrew

brew install subversion

或者使用WANdisco的预编译版本
http://www.wandisco.com/subversion/download#osx

Subversion 客户端的兼容性

我们支持 Apache Subversion 1.8 或者更高的版本,当你安装一个 Subversion 客户端时,如果错误提示是“无法协商验证验证方式” 请确保你的客户端支持 SASL 验证,比如在 Ubuntu 上,你可以安装 libsasl2-dev 然后编译 Subversion, 这样的话客户端是支持 SASL 验证的。

sudo apt-get install libsasl2-dev

当你使用 svnkit 或者 SubversionJavaHl 这类 IDE 集成客户端,请确保支持 SASL 验证。

关于 GIT 与 SVN 的转换

如果用户存在一个基于 Subversion 托管的项目,要迁移到 码云,可以使用 git-svn 将项目转变为基于 git 的仓库,然后推送到 码云,这样你依然能够使用SVN对项目进行操作。请记得先在 码云 上新建一个项目

 git svn clone http://myhost/repo -T trunk -b branches -t tags 
 git remote add oscgit https://gitee.com/user/repo
 git push -u oscgit --all

通常来说,如果本地存在 SVN 仓库,则可以:

git svn clone file:///tmp/svn-repo -T trunk -b branches -t tags 
git remote add oscgit https://gitee.com/user/repo
git push -u oscgit  --all

将项目转移到 码云 上以后,使用 svn 命令 checkout 即可对项目进行操作。

高级指南:
http://git-scm.com/book/zh/ch8-2.html

安装 git,git-svn

Windows

msysgit 官网 http://msysgit.github.io/,版本比较低。
Github for Windows 提供的 git 工具和 msysgit 一致。
MSYS2 git 下载地址: http://sourceforge.net/projects/msys2,然后启动终端,安装 git,目前版本为2.4.3。

pacman -S git

Cygwin git 下载地址: http://www.cygwin.com/,然后使用包管理软件或者直接下载 git 源码编译 git。

make configure
./configure --prefix=/usr/local
make 
make install 

Linux

有包管理器的直接用包管理器安装。
如 Ubuntu

sudo apt-get install git git-svn

也可以手动编译。

Mac OSX

下载地址:http://git-scm.com/download/mac

帮助

工作流程


安装设置 git

下载最新版本的git

http://git-scm.com/downloads

当你安装完成git的时候,你需要简单的配置一下,打开终端:

用户名

第一步,你需要告诉git你的名字,这个名字会出现在你的提交记录中。

git config --global user.name "你的名字"

Email

然后是你的Email,同样,这个Email也会出现在你的提交记录中,请尽量保持此Email和您的码云的注册Email一致。

git config --global user.email "你的Email"

Clone 和 Push

Clone 项目

git clone http://gitee.com/xxxxxx/xxxxxx.git

创建特性分支

git checkout -b $feature_name

写代码,提交变更

git commit -am "My feature is ready"

将你的提交推送到 码云

git push origin $feature_name

在提交页面你可以查看你的变更,例如:

http://gitee.com/oschina/git-osc/commit/f3dd1c5bae48fa4244e2595a39e750e5606dd9be

创建一个 pull request

你可以fork任意的公开项目,当你修改了你fork的项目,你可以向源项目提交pull request。项目的作者在审阅过代码后可以决定是否将此变更应用到源项目。

在码云上使用SVN

使用教程已经整理在这里


<a name="ssh_keys"></a>
SSH Keys
========


SSH key 可以让你在你的电脑和 Git @ OSC 之间建立安全的加密连接。

你可以按如下命令来生成sshkey

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"# Creates a new ssh key using the provided email
# Generating public/private rsa key pair...

查看你的public key,并把他添加到 Git @ OSC http://gitee.com/keys

cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....

添加后,在终端(Terminal)中输入

ssh -T git@gitee.com

若返回

Welcome to 码云, yourname! 

则证明添加成功。


关于权限


访客

对于公有项目:

  • 创建issue
  • 评论
  • Clone 和 Pull 项目
  • 打包下载代码
  • Fork 项目
  • 创建 pull request

报告者

  • 继承访客的权限
  • 私有项目:不能查看代码
  • 私有项目:不能下载代码
  • 私有项目:不能fork代码

观察者

  • 继承报告者权限
  • 创建wiki
  • 打包下载代码
  • 不能push代码
  • 私有项目:可以fork

开发者

  • 创建 issue
  • 评论
  • Clone 和 Pull 项目
  • 打包下载代码
  • 创建 pull request
  • 创建分支
  • 推送分支
  • 删除分支
  • 创建标签(里程碑)
  • 创建 wiki

管理员

  • 创建 issue
  • 评论
  • Clone 和 Pull 项目
  • 打包下载代码
  • 创建 pull request
  • 创建分支
  • 推送分支
  • 删除分支
  • 创建标签(里程碑)
  • 创建 wiki
  • 添加项目成员
  • 强制推送分支
  • 编辑项目属性

项目组管理员

  • 编辑项目组属性
  • 增加成员
  • 添加/删除项目
  • 设置项目组管理员
  • 删除项目组
  • 更改成员项目权限

Git @ OSC Flavored Markdown


Git @ OSC 的markdown基于原markdown做了一下扩展,具体使用如下。

You can use GFM in:

  • 提交消息
  • 评论
  • issues
  • pull requests
  • 里程碑
  • wiki 页面

跟传统的Markdown的区别

URL 自动链接

插入的URL不需要做特殊处理,会自动变成链接。

Emoji表情

支持Emoji表情,参考:Emoji cheat sheet

插入代码片段

可以向如下这种方式插入代码片段,可以在标记后面指定编程语言,如果没有指定语言,编译器会尝试自动识别。

```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```

将会变成

require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html

特殊的 码云 引用。

GFM 可以识别一些特殊的标记,并且支持自动补全,例如:

  • 123 (Issue)

  • !123 (Pull Request)
  • commit:1234567 (提交)
  • :icon: (emoji 表情)

如何导入外部的Git仓库?

因为一些原因暂没有开放一键导入功能。
有需求的可以先按照如下步骤导入其它地方的git仓库(以 github 上的 impress.js 为例):

1. 从原始地址 clone 一份 bare 仓库:

git clone --bare  https://github.com/bartaz/impress.js.git

2. 在 码云 上 创建一个项目

3. 以 mirror 的方式把刚才 clone 的项目 push 到 码云 上:
(如果提示输入 git 用户密码,请到 http://gitee.com/keys 添加 SSH Key)

cd impress.js.git
git push --mirror git@gitee.com:username/impress-js.git

这种方式的好处是:可以完整地保留原项目的所有 branch 和 tag 信息。
提示:首次push内容量较大,推荐采用ssh方式push,传输更快,更稳定,如果项目较小,也可以采用http方式push。

更多导入办法,请点击这里

项目组的使用

项目组可以使用户更加方便的添加用户到项目中

1. 创建项目组:http://gitee.com/teams/new

2. 添加用户:可以设置两种权限,一种是用户默认在项目中的权限,一种是项目组管理权限

3. 指派到项目:如果选择开发者,那么将会按照用户在项目组中的默认权限为项目添加;如果选择管理员,那么项目组中的所有成员将会成为项目的管理员

4. 撤销项目:撤销项目将会把在项目属于项目组中的成员移除,如果成员同样存在于此项目别的项目组中,那么将会更新为别的项目组中的相应的项目权限。

Tips

  • 项目组只有项目组的成员可以访问

  • 项目组的名称是全站唯一的

  • 一个用户存在于两个项目组a,b中,在a中的项目权限是管理员,在b中的项目权限是开发者,如果项目组a,b同时指派到项目pro,那么将项目组a从pro中移除之后,此用户在pro中的权限将会从管理员降为开发者。

README 规则

1. 码云 README 文件支持多种文件格式以及命名规则。

例如: README, README.md, README.org...

或者: README_zh.md, README_en.md...

2. 若有多个README文件,则优先显示文件名包含'_zh','_cn'等中文标注的README文件。

例如同一目录包含两个README文件:README_en.md README_zh.md

则显示README为: README_zh.md

改写历史,去除大文件

git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all
git push origin --tags --force
git push origin --all --force

详细参见:这里

继续阅读

你可以点击这里阅读权威的git书籍ProGit

以下为收集的开源中国社区热心网友制作的码云跟各种IDE,软件的集成办法,可以点击查看:

衷心感谢网友 @nekocode @铂金便便 @恺哥 [@彼岸花开花落时] (http://my.oschina.net/bianhuakaihualuoshi) @whaon @小小程序员 @老左 @司马奔 @枫叶飘零 @大漠真人细心整理分享资料。

项目导入帮助

说明

如果你是一名github的用户,然后想使用咱们码云的服务,那么使用项目导入功能,是一个非常快速的转入码云的方式。

项目名要求

只允许字母、数字或者下划线(_)、中划线(-)、英文句号(.),必须以字母或数字开头。
不符合项目名要求会导致无法导入。

如何使用

点击页面header “+” 的按钮,找到 “Github 导入”


输入图片说明

这会跳转到Github的登录、授权页面,需要您的授权:

undefined

当然,如果您已经登录或授权过了,那么就会直接进入仓库列表页面:

输入图片说明

然后点击你需要“导入”的仓库,然后耐心等待几秒钟,项目导入完成!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容