使用github进行项目开发与程序维护

1. github简介

我对GitHub不甚了解。现在很多生物信息学软件的Paper中都提供了软件的Github网址。

个人理解,GitHub能很方便用于开源软件的存储和代码维护。软件开发人员在Github网站注册一个账户后,相当于在Github服务器上有了账户和密码;开发某个项目的软件后,可以将软件源代码通过该账号和密码上传到Github服务器上;每次软件维护和代码上传,都会详细记录更新的内容;其它人可以将代码下载,并进行修改,形成软件的分支。

2. 在Github软件上注册用户

Github注册页面注册一个账户,Username: train-chenlianfu;Email address:910432211@qq.com;Password: train123456;再点击Create an account,完成注册。

3. 安装git软件

在CentOS系统上,虽然自带git软件,但是推荐使用高版本git,否则可能版本过低,导致不能兼容https而不能使用。

下载并安装最新版本git软件:

$ wget https://github.com/git/git/archive/v2.17.0.tar.gz -O git-v2.17.0.tar.gz
$ tar zxf git-v2.17.0.tar.gz 
$ cd git-2.17.0/
$ make configure
$ ./configure --prefix=/opt/sysoft/git-2.17.0
$ make -j 24
$ make install
$ echo 'PATH=/opt/sysoft/git-2.17.0/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ cd .. && rm -rf git-2.17.0

4. 在GitHub创建一个项目

新注册账号会弹出需要验证邮箱地址的信息,在邮箱收件箱中点击链接,进入GitHub主页;

点击GitHub主页右上角的加号“+”,弹出一个菜单,点击New repository;

在Repository name栏输入一个软件名称,例如:blast_tools;

再勾选Initialize this repository with a README,表示给本项目直接生成一个文件README.md;

在Add a license下拉菜单中选择GNU General Public License v3.0,表示本项目是开源项目,软件中自动增加一个文件LICENSE;

点击Create repository,创建项目。

5. 使用git管理代码的上传和更新

从GitHub上下载blast_tools软件:

$ git clone https://github.com/train-chenlianfu/blast_tools.git
$ git clone git@github.com:train-chenlianfu/blast_tools.git
推荐使用后者ssh方式来clone软件,特别是需要密钥支持时。 $ cd blast_tools/ $ ls LICENSE README.md 在当前工作目录下生成文件夹blast_tools,该文件夹中包含两个文件:LICENSE和README.md。 其中README.md中仅包含一行内容:“# blast_tools”;该文件内容能直接显示在GitHub网站的本项目主页上;#号表示该行使用加粗加黑加大字体显示。 其实,在当前文件夹下,还存在一个隐藏文件夹.git,该文件夹 $ git pull 当需要更新相应的软件时,使用pull将更新的数据下载过来。

在blast_tools/文件夹中写软件代码,例如编写了perl程序blast.pl,并修改了README.md文件内容。

此外,若由于网络原因导致github使用不佳,需要代理:

设置git代理
git config --global http.proxy "47.104.224.181:3128"
git config --global https.proxy "47.104.224.181:3128"

取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

点击GitHub主页最右上角的用户图标,在下拉菜单中选择Settings,进入用户设置;在左边一栏中点击SSH and GPG keys;再点击New SSH key;在Title一栏中随意输入字符train_ssh;再在Key一栏中输入OpenSSH的公钥(点击进入本博客OpenSSH公钥生成方法的介绍文章);最后点击Add SSH key;添加公钥后,则可以将本地的软件代码通过git命令同步到GitHub网址上。

将本地修改或增加的文件上传到GitHub上:

$ git config user.email "910432211@qq.com"
$ git config user.name "train-chenlianfu"
  以上两行命令设置该项目对应的GitHub项目的用户名和邮箱地址,用于修改.git/config配置文件内容。

$ git add *
  对当前工作目录中的所有文件提出更改。当然git add命令后可以接指定的多个文件或文件夹。

$ git rm -r files
  删除文件或文件夹。若直接使用系统的rm命令,则仅删除本地的。使用git rm命令则可以删除githhub上的文件。

$ git commit -m "first submit"
  提交本次改动,本次改动的所有文件,在GitHub中全部被批注成"first submmit"。
  程序会自动检测有有多少个文件有改动,插入多少字符,删除多少字符等。这些改动信息会存于本地.git文件夹中。

$ git push origin master
  将改动信息和文件推送到origin(GitHub项目)的master分支(一个项目可能有多个分支,此处将本地改动推送到主分支)上。可能会弹出界面需要输入用户名和密码。
  origin是一个远程项目,在.git/config配置文件中有定义origin指向了GitHub的网址https://github.com/train-chenlianfu/blast_tools.git。 

6. 设置github的ssh密钥,用于数据推送和下载

从2021.8.13开始,github不再支持输入密码进行代码上传和下载了。此时,推荐使用SSH密钥来进行快捷安全的操作。需要注意的是github不支持普通的dsa和rsa密钥,推荐使用ed25519类型的密钥,并要求公钥尾部是github的注册邮箱。具体操作方法:

先在Linux服务器中生成一堆密钥:
ssh-keygen -t ed25519 -P '' -f ~/.ssh/id_ed25519 -C chenllianfu@foxmail.com
cat ~/.ssh/id_ed25519.pub  >> ~/.ssh/authorized_keys 

然后将~/.ssh/id_ed25519.pub的内容填入到github网站中:登录github网站,点击右上角用户的设置,然后在左边栏目中点击SSH and GPG keys,按提示输入公钥信息并保存。

最后,在Linux服务器中检测是否成功:
ssh -T git@github.com
出现一下信息,则表示成功:
Hi chenlianfu! You've successfully authenticated, but GitHub does not provide shell access.

7. 重新对自己的软件构建本地仓库

若本地软件被删除了,则可以从github上下载最新的软件,然后继续对软件维护和更新。

首先从https方式下载软件,例如:

git clone https://github.com/chenlianfu/geta.git

然后修改下载软件中的 git 配置文件 geta/.git/config:

    url = https://github.com/chenlianfu/geta.git
将以上网址修改为以下的网址,表示ssh连接github,才能上传数据。
    url = git@github.com:chenlianfu/geta.git