远程git仓库

远程仓库是团队公共仓库,一般用于团队协作。远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。

远程仓库可以直接使用市面上的远程仓库(基于git的远程仓库有很多,最有名的是github和gitlib),也可以自己搭建一个公共的仓库。

github

gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。github号称是全球最大的同性交友平台哈哈

github官网:https://github.com 使用前请先自行注册github账户。

前面已经在本地创建了一个Git仓库,现在想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,一举多得。

下面介绍远程仓库跟本地仓库关联的方法。如果只是想下载github上别人的代码的话,直接在clone or download里选择Download ZIP即可

传输协议

本地Git仓库和GitHub仓库之间需要传输数据,传输数据就需要传输协议,git支持多种传输协议,最常用的就是ssh协议和https协议

使用https协议时每次需要输入口令(github用户名和密码)

使用ssh协议时需要先设置SSH Key。GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

本地Git仓库创建SSH Key
ssh-keygen -t rsa -C "your email"

把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可

创建完后在用户主目录里会有个.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

远程Github仓库关联
登陆GitHub -> 点击右上角用户头像 -> settings -> SSH and GPG Keys -> New SSH key -> 填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容 -> Add SSH key

使用ssh协议时,第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了。

创建远程github仓库并与本地git仓库关联

创建远程github仓库
右上角的+号 -> new repository -> 填写Repository name、Description、Initialize this repository with a README(顺便创建readme文件) -> Create repository

创建完远程仓库后会跳到一个关联页面,列出了远程仓库与本地仓库关联的方法。可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

关联情景1:已有本地库,新创建的远程库与之关联

这种情景一般为项目创建者,本地创建项目,在github上创建一个开源库,团队其他成员就可以克隆此项目。

//将文件提交到本地版本库
git add 要提交的文件
git commit -m '描述'

//关联远程库。以下两种方式都可以,任选一种即可。
//git支持多种协议,包括ssh协议和https协议(默认使用ssh协议)。https协议速度慢,并且需要输入口令(github账户密码),如果没有设置ssh key,可以用https协议。
git remote add origin https://github.com/用户名/项目名.git
git remote add origin git@github.com:用户名/项目名.git

//将本地git仓库master分支推送到远程github仓库master分支。
//第一次推送master分支时,加上了-u参数,表示将本地的master分支推送到origin主机,同时指定origin为默认主机,在以后的推送或者拉取时就可以简化命令,不必加-u参数了。
//origin为远程库的名字,这是Git默认的叫法,也可以改成别的,但没必要
git push -u origin master

刷新github页面,就可以看到本地git仓库的代码已经同步到github仓库里了。

注:若项目是git clone别人的项目,那么要想在github上创建成自己的项目,需要先把项目根目录里的.git目录删除(切断与别人项目的连接),重新git init(初始化)。之后再执行上述命令。

关联情景2:没有本地git仓库,从新创建的远程库克隆到本地仓库

这种情景一般为项目的团队成员克隆项目到本地,进行开发。

//https协议和ssh协议,选择任意一种即可
//项目地址可在 clone or download 里找到
git clone https://github.com/用户名/项目名.git
git clone git@github.com:用户名/项目名.git

这样,就有了一个跟远程github仓库关联的本地仓库了。

自己搭建Git远程仓库

一般情况下,使用GitHub托管代码足以。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费(创建私密仓库),那就只能自己搭建一台Git服务器作为私有远程仓库使用。

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

搭建步骤

第一步,安装git
sudo apt-get install git
第二步,创建一个git用户,用来运行git服务
sudo adduser git
第三步,创建证书登录

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

sudo chown -R git:git sample.git
第五步,禁用shell登录

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行

git clone git@server:/srv/sample.git

公钥权限管理

管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,可以用Gitosis来管理公钥(一般大团队都有自己的管理员)。

管理权限

有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。可以直接使用Gitolite来管理权限。

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

推荐阅读更多精彩内容