美文网首页
远程git仓库

远程git仓库

作者: 高鸿祥 | 来源:发表于2019-01-06 23:12 被阅读85次

远程仓库是团队公共仓库,一般用于团队协作。远程仓库实际上和本地仓库没啥不同,纯粹为了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来管理权限。

相关文章

  • Git远程配置

    Git远程查看  Git查看远程仓库 Git远程参数 Git配置远程仓库

  • 2018-05-14

    删除远程分支: git push 远程仓库 --delete 远程分支 git push 远程仓库:远程分支 本地...

  • Git

    删除远程 Git 仓库 git remote rm origin 添加远程 Git 仓库 git remote a...

  • Git 入门到放弃

    简介 git关联远程仓库 本地仓库与远程仓库同步问题 Git 终端命令 git关联远程仓库 基本流程 注册gith...

  • git 仓库

    git 初始化 初始化git init git 新建 git 仓库,关联远程仓库 关联远程仓库git remote...

  • Git常用命令大全

    // 初始化仓库 git init //从远程仓库克隆 git clone // 关联远程仓库 git remot...

  • 通过Git将本地项目和远程仓库做关联

    添加远程代码仓库: git remote add origin 远程仓库地址 提交代码到远程仓库: git pus...

  • git 查看、添加、删除 远程仓库

    查看远程仓库地址git remote -v(去掉-v可查看远程仓库名 ) 添加远程仓库地址git remote a...

  • git 命令行操作笔记

    git中的选项解释 创建本地git仓库 提交代码到git仓库 本地git仓库添加到远程仓库中 克隆远程仓库到本地 ...

  • git关联远程仓库

    git关联远程仓库 添加远程仓库:git remote add origin git@github.com:exa...

网友评论

      本文标题:远程git仓库

      本文链接:https://www.haomeiwen.com/subject/dcoerqtx.html