Github 是现在非常流行的主流版本控制软件,它依托Git并提供代码仓储以及程序员社交服务。
下面介绍其最基本的使用方法。
使用说明
配置
- 配置用户信息
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
如果用了 –global 选项,则所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他user.name或者user.email,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
- 要检查已有的配置信息,可以使用下列两种方式:
git config --list
git config user.name
基本指令集
在了解Git的基本指令集之前,我们先了解以下Git的整体设计理念【如下图】。
通过将新文件加入到索引 (index) 中来监控文件的版本及改动,之后提交到本地仓库中,由Push命令将本地版本推送到远程仓库中。
克隆现有仓库
如果想对某个开源项目出一份力,可以先把该项目的 Git 仓库复制一份出来,创建一个属于自己的分支。
- 将该分支克隆到本地:
git clone https://github.com/userName/repositoryName.git
这会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。
本地仓库操作
创建
- 创建文件夹:创建本地文件夹用以存储及同步本地代码。
mkdir repos
cd repos
- 初始化本地代码仓库:
git init
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
- 将本地仓库指向Github托管的远程仓库:
git remote add origin https://github.com/userName/repositoryName.git
索引
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交。将新文件添加入索引十分简单:
git add *.c
git add README
查看状态
工作目录下面的所有文件只有两种状态:已跟踪或未跟踪。已跟踪的文件是指原本就已纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而既没有上次更新时的快照,也不在当前的暂存区域的文件都属于未跟踪文件。
git status
# Far more simplified output
git status -s
git status --short
该命令反应工作目录下文件在缓存区中的状态:
- 已追踪:更改或未更改。
- 未追踪。
若需更新工作目录在缓存区中的状态,则需重新使用 git add 将修改文件的最新版本缓存起来,否则提交远程仓库时所提交版本为旧版本,而非当前工作目录中的最新版本。
建立忽略列表
对于不希望被追踪缓存的文件,我们可以建立一个忽略列表 .gitignore 来进行管理。
# ignore me
*.[oa]
# ignore all .a and .o files excepts lib.a
!lib.a
# ignore all files end with ~
*~
*.tmp
# ignore all files in the doc/ directory
build/
# ignore .txt files in the doc/ directory
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt
比对差异
实际上 git status 的显示比较简单,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff 命令。
git diff
# compares your staged changes to the last commit:
git diff --staged
git diff --cached
提交更新至缓存区
将索引提交至本地仓库的缓存区由下述代码完成:
git status
git commit -m 'Some comment'
git commit -m "Some comment"
其中文本为版本的注解,用来说明你做了些什么。
从缓存区移除
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从缓存区域移除),然后提交。
如果已将工作目录中某一文件手工删除且之前被缓存,则在执行 git status 后会提示:
Changes not staged for commit:
deleted: fileName.extensionName
这时需要从缓存区列表中删除该文件。
git rm fileName.extensionName
- 若在删除前已做修改且提交至缓存区,则还需加上强制删除选项。
git rm -f fileName.extensionName
- 若仅想将某文件从缓存区中移除追踪,但不删除该文件,则需加 –cached 选项。
git rm --cached fileName.extensionName
移动文件(重命名)
git mv file_from file_to
推送版本
将本地仓库所记录的代码版本推送至远程仓库:
git push
若出现如下类似的推送不成功:
error: 无法推送一些引用到 ‘https://github.com/userName/repositoryName.git’
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 ‘git pull …’)。详见
提示:’git push –help’ 中的 ‘Note about fast-forwards’ 小节。
则应先从远程仓库获取数据后,合并到当前本地仓库中的当前分支。
git pull https://github.com/userName/repositoryName.git
git push
创建分支
创建代码某版本的一个分支:
git checkout -b branchName
查看当前分支:
git branch
推送当前分支:
git push -u origin branchName
转换到主干:
git checkout master