用git在github上托管代码

git是版本控制工具,主要用来监测和记录纯文本文件所做的更改。git可以将所做的修改远程提交到git repository (如 github) 。 同时, 每一个git用户可以设定多个分支。 其中master分支, 一般作为软件的正式发布版本。 以其他名字命名的分支, 可以进行debug。 不同的分支之间, 可以合并。 而每一次提交修改, 都是在本地的repository库中进行, 只有在push到远程的repository后, 远程repository才接收到更改的记录, 并作出改变。

这样, 每一个本地的git repository都有关于主干(即对master分支的修改), 以及本地分支(任何一个master以外的分支)的完整记录。 由于修改都是先提交到本地的git数据库中,因此提交修改速度都很快。

本文以 herblabel R程序包为例, 介绍如何使用git, 以及如何将herblabel的源代码托管到github上。

  1. 在github上, 创建相应程序包的repository, 如命名为 herblabel

网址为 https://github.com/helixcn/herblabel

若未安装git, 需要在terminal输入 sudo apt-get install git

  1. 第一次使用本地版本的git时,需要设定用户名和联系方式

打开 terminal,输入

1
2
git config --global user.name "Jinlong Zhang"
git config --global user.email "jinlongzhang01@gmail.com"
  1. 更改 credential helper缓存密码的时间

git config --global credential.helper 'cache --timeout=3600'

  1. 在本地/herblabel/文件夹中 创建本地的repository
1
2
cd /home/jinlong/git_repositories/github_herblabel/
git init
  1. 在/herblabel/文件夹下, 将herblabel 源代码记录到git库中。

git add *

  1. master版本, 即最终发布版本,commit到本地的库中

git commit -m 'initial commit'

  1. 推送到github

git push -u origin master

git会提示输入github的用户名和密码, 输入后, git会自动将master分支上传到服务器。

  1. 将master分支推送到github服务器后, 每一次在本地进行修改时,如修整了软件的一个bug, 一般流程如下

    1. 新建一个分支 如 herblabel_dev 命令如下 git checkout -b herblabel_dev
    2. 修改代码, fix the bug
    3. 回到master分支 git checkout master
    4. 将herblabel_dev所做的修改合并到master中: git merge herblabel_dev
    5. 提交所做的修改 git add *
    6. 记录所做的修改 git commit -m “XX bug fixed”
    7. 提交所做的修改到github服务器 git push,

本地使用分支 Branch
9. 创建一个新的分支(branch),将其作为活动分支(checkout),然后就可以编辑、载入和提交新的快照。

创建新的分支herblabel_dev

git branch herblabel_dev

  1. 将herblabel_dev分支作为工作分支

git checkout herblabel_dev

  1. 继续编辑源代码,git会将改动自动记录到herblabel_dev分支下

  1. 查看状态

git status

  1. 将进行的修改做详细的记录, 并做记录

git commit -m 'Fix Bug A'

  1. 转换到master分支, git会自动显示哪些地方做了更改。

$ git checkout master

  1. 将改动的信息保存到git数据库中, 用log 消息记录

$ git commit -a -m 'change files'

  1. 将 herblabel_dev分支上的改动,合并到当前分支

git merge herblabel_dev

  1. 删除这个分支

git branch -d herblabel_dev

如果在本地删除了某文件, 而同时希望在github上删除, 则应该先commit

git commit -a -m "A file was deleted"

之后push

git push

放弃本地所做的所有修改比如master分支:

git reset --hard origin/master

可以用 gitg 软件查看所做的更改以及分支

更多git的图形用户界面GUI参见 https://git-scm.com/downloads/guis