概述
之前Github支持开源,建立私有仓库需要付费,因此一般都是在服务器上搭建自己的Git或者SVN。最近又有建私有仓库的需求,于是在Github上搜寻了一下,发现Github现在对免费用户也开放了建立私有仓库的功能,故在此纪录下所有步骤,供大家学习交流。需要注意的是,虽然Github开放了建立私有仓库的功能,但是实测免费用户最多只能够添加三位collaborators,如果是一个更大的团队进行合作开发,建议另辟蹊径,搭建自己的版本控制器,或者选择Github的付费服务。
准备工作
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要在本机通过如下指令创建本地密钥("Email@163.com"需要修改为注册GitHub时所用的邮箱):
ssh-keygen -t rsa -C "Email@163.com" //创建密钥
上述指令不是DOS指令,所以需要使用Git Bash进行操作。该指令会在用户目录下(C:\Users\)生成公钥和私钥,将公钥复制到Github上的SSH keys中(如下图),进行用户身份认证。只有经过身份验证,本地仓库才能获得对远程仓库的push权限,接下来就可以愉快地搞事情啦!
创建项目并初始化本地仓库
我们首先在本地创建了一个名叫iss-parent的项目,并在该工程下创建了iss-bigdata模块。
此时本地的Git仓库还未创建,我们需要在项目路径下打开Git Bash,执行以下命令,初始化本地的Git仓库:
git init
显示成功初始化一个空的本地仓库,可以看到项目目录看到.git文件夹(该文件夹是隐藏文件夹,需要设置查看隐藏文件夹才能看到)。
创建Github私有仓库
在Github repositories界面的偏右位置,点击一个显眼的绿色“New”的按钮,进入如下界面,选择private:
我们选择添加上README文件以备不时执行,并且加上gitignore,这个文件对于强迫症患者来说还是很有用的,因为.idea文件夹、编译后的文件夹、jar包之类的会一直变化,但是一般来说我们并不想把这些也push到仓库,那么此时就可以使用gitignore文件把一些不想要push的文件过滤掉。需要注意一点,如果你不慎在创建.gitignore文件之前就push了项目,那么即使在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理,所以创建仓库的同时加上gitignore文件很重要!创建成功后会跳转到如下界面:
关联远程仓库
之前已经成功创建了本地仓库,现在需要使用以下指令把本地仓库与Github上的仓库关联起来:
git remote add origin git@github.com:LookElvis/iss-parent.git
最后的参数可以在Github当前项目主界面的Clone or download获得,可以选择SSH方式或者HTTPS方式,本机之前配置了SSH,所以我们选择SSH的方式,可以直接通过身份认证。
将本地仓库推送至远程仓库
为了保证本地仓库和远程仓库的一致性,我们需要先将远程仓库的文件pull下来,使本地仓库的版本不高于远程仓库,然后再把当前项目创建的文件提交到本地仓库。
git pull origin master #拉取远程仓库
git add . #添加到本地仓库
git commit -m "first commit" #提交到本地仓库
此时本地仓库已经结合了远程仓库的文件,此时可以将本地仓库的所有内容推送到远程仓库,由于远程仓库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,直接使用git push即可。
git push -u origin master
查看效果
本地效果图:
Github效果图:
此后,项目的本地文件更新后都可以通过以下命令提交到远程仓库:
git add .
git commit -m "update"
git push
例如在本地项目中添加了test.java文件后,经过以上操作,结果如图:
添加合作开发者
因为该项目在Github上还是私有仓库,所以其它人并不能看到,我们可以在Github上当前项目的Setting->Collaborators中进行设置。
以下是添加了一个合作开发者的截图,最多可添加三个合作开发者。
添加合作者后,该合作者会收到邮件进行确认,确认后该项目就对合作者可见了,最后的最后,合作开发者就可以在git clone后愉快地对项目进行push和pull了~
合作者Github仓库同步
合作开发者的git clone分为两种情况:
1、git clone源仓库;
2、fork源仓库后git clone自己的仓库。
对于git clone源仓库而言,大家都可以对仓库内容进行随意地更改修正,很方便但是不够安全。
对于fork源仓库后git clone自己的仓库而言,是开发中较为常见的一种方式,但是正常的push和pull只能对合作者自己的远程仓库进行操作,fork并不能将合作者仓库和源仓库绑定在一起,无法感知源仓库的更新,也不能将更新提交到原仓库。需要通过以下操作将开发者仓库和源仓库进行同步:
Github仓库和源码仓库同步
首先要先确定一下是否建立了主repo的远程源:
git remote -v
如果里面只能看到你自己的两个源(fetch 和 push),那就需要添加主repo的源:
git remote add upstream URL
git remote -v
然后就能看到upstream了。如果想同步原主仓库的更新,可以做如下操作将原仓库代码拉取下来并与本地代码进行合并:
git fetch upstream
git merge upstream/master
然后需要在本地创建一个分支,不要在master上做操作:
git checkout -b branchName
在分支下进行更新,更新完成后先进行commit,再推送到远程仓库的'branchName'分支:
git add .
git commit -m 'anything ...'
git push origin branchName
最后,需要在Github主页点击pull request按钮,提交给项目作者,请求merge。