分布式版本控制系统Git——入门基础

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地管理任何或小或大的项目版本。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的。

Git_logo
Git_logo

认识Git

当你点开文章链接的时候,或多或少你已经风闻了一些Git的故事。与Linux内核一样,Git诞生于Linus Torvalds之手,并与Linux、开源、代码存在这千丝万缕的关系。

认识Git的最快速方式当然是通过网络搜索,下面简单列举一些链接:

  • Git官方网站:信息的源头
  • Pro Git官方推荐教程:中英文、PDF、mobi等格式面面俱到
  • Git百度百科:了解多数国人的科普频道

为什么是Git

快速浏览了上面的链接后,相信你脑海中已经有了版本控制和Git的基本概念了。那么问题来了,为什么要进行版本控制,为什么又非得是Git?

版本控制的重要性,对于码农/极客无需解释。对于普通用于而言,我们分类举例解释。如果你是非计算机的工程类研究者(笔者也是),高效的数值模拟和数据处理都离不开代码,可能版本管理没有那么重要(反复建文件夹也能分清)。但是,研究中可能更多地使用别人开发的库和工具包,如果兴趣再浓厚点你还会参与部分源代码学习,那么接触版本控制和GitHub也只是时间问题了。更重要的是,版本管理是便于高效的团队协作,利用团队的力量进行设计和研究。如果你是文商科学者,代码可能消失了,团队细节协作方式也减少了。但是,如果你进行大批量的文字创作,经典了LaTeX排版和当下流行了Markdown都是码字神器,将这些工具与版本控制结合将带来神奇的营销效果。

Git相比其他版本控制的优势是什么?分布式、GitHub、Linux背景三大要素成就了Git的迅速推广。网络关于这方面的讨论已经很多了,不再赘述,推荐伯乐在线上的两篇文章:

如何安装Git

安装并配置Git是使用的前提。Git具有多平台的特性,在windows、Mac OSX和Linux上都能够方便安装,甚至是目前很多Linux发行版直接就自带Git。Git的官方下载链接如下:

https://git-scm.com/download/

使用Git时,最常用的技巧当属自动补全了,推荐开源中国社区中的水平提升方法。

Git妙用网站推荐

Git功能如此强大,当然也只有在频繁使用的时候才能得到展示。同样,码农业界已经没有疑问了,但推荐以下网站供新用户摸索。

  • GitHub:鼎鼎大名,上面托管了Linux等重量级代码,被誉为“代码基因库”,上面也能搜索到一些常用数值计算库、LaTeX模版、自由撰稿数目、还能构建个人静态主页
  • Coding:国产化的GitHub,当然它在官网上很聪明地做了否认的声明,并强调自身优势是国内特殊情况下的私有代码托管
  • code.aliyun:阿里巴巴的强大后盾和动力,值得观望其发展

Git常用操作命令

为了达到简洁的目的,笔者仅在此列举Git常用操作命令,便于快速查找和使用,并不对命令进行过多说明。命令的具体说明可以参见Pro Git官方推荐教程。

初次运行Git前的配置 —— git config

Git自带一个git config的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

  • /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  • ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
  • 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。

每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。

用户信息
<pre><code>
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
</code></pre>

文本编辑器(可选项)
<pre><code>
git config --global core.editor vim
</code></pre>

检查配置信息
<pre><code>
git config --list
git config user.name
</code></pre>

获取帮助
<pre><code>
git help <verb>
</code></pre>

基本操作命令

Git的基本操作包含:创建版本库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改。 本章也将向你演示如何配置 Git 来忽略指定的文件和文件模式、如何迅速而简单地撤销错误操作、如何浏览你的项目的历史版本以及不同提交(commits)间的差异、如何向你的远程仓库推送(push)以及如何从你的远程仓库拉取(pull)文件。

创建版本库(repository)

创建版本库又两种方式:第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。

在现有目录中初始化仓库:
如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入:
<pre><code>
cd currentProjectDir/
git init
git add filename.c
git add LICENSE
git commit -m 'initial project version'
</code></pre>

克隆现有的仓库:
如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源项目贡献自己的一份力或者直接想下载项目使用,这时就要用到 git clone 命令:
<pre><code>
git clone https://github.com/libgit2/libgit2
</code></pre>

更新版本库的修改

现在我们手上有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝。 接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。

请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。

检查当前文件状态:
要查看哪些文件处于什么状态,可以用 git status 命令:
<pre><code>
git status
</code></pre>

还可以使用状态简览模式:
<pre><code>
git status -s
</code></pre>

返回的结果中,新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。

跟踪新文件:
使用命令 git add 开始跟踪一个文件
<pre><code>
git add filename
</code></pre>

暂存已修改文件:
如果我修改了一个名为 CONTRIBUTING.md并且已被跟踪的文件,然后希望将修改结果暂存:
<pre><code>
git add CONTRIBUTING.md
</code></pre>

提交更新:
现在的暂存区域已经准备妥当可以提交了。 在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。 这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:
<pre><code>
git commit -m "add some label here"
</code></pre>

移动、删除等操作:
移动、删除等常规操作都需要在原命令前添加 git 。

远程服务器上的Git操作

至此,Git 的操作都是在本机上进行,并未涉及远程服务器和协作问题。这里借助GitHub的代码托管说明 Git 的远程服务器搭建与操作。

GitHub
GitHub

GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。 所以,尽管这不是 Git 开源项目的直接部分,但如果想要专业地使用 Git,你将不可避免地与 GitHub 打交道,所以这依然是一个绝好的学习机会。

账户的创建和配置

第一件事是创建一个免费账户。 直接访问 GitHub官网,选择一个未被占用的用户名,提供一个电子邮件地址和密码,点击写着“Sign up for GitHub”的绿色大按钮即可。

Git链接到自己的GitHub

现在,你完全可以使用 https:// 协议,通过你刚刚创建的用户名和密码访问 Git 版本库。刚刚我们创建的账户是为了以后 fork 其它项目,以及推送我们自己的修改。如果你习惯使用 SSH 远程,你需要配置一个公钥。首先用刚刚配置的Git用户邮箱生成公钥:
<pre><code>
ssh-keygen -t rsa -C "johndoe@example.com"
</code></pre>
生成的密钥保存在~/.ssh/id_rsa.pub文件中,复制密钥(这里必须采用命令行复制,否则不符合格式要求):
<pre><code>
pbcopy < ~/.ssh/id_rsa.pub
</code></pre>

然后到GitHub网页中登陆自己的账号,在account setting中,找到SSH and GPG keys将复制的密钥加入New SSH key中(该操作需要再次输入GitHub的密码)。输入以下代码检查链接是否建立:
<pre><code>
ssh git@github.com
</code></pre>
如果返回结果中显示如下,则表示链接已经完成建立:
<pre><code>
Hi your_username! You've successfully authenticated, but GitHub does not provide shell access.
</code></pre>

完成首次推送

向GitHub推送的命令包含两个变量:

  • <REMOTENAME>:远程端的名称,例如origin
  • <BRANCHNAME>:分支的名称,例如master

推送命令格式如下:
<pre><code>
git push <REMOTENAME> <BRANCHNAME>
</code></pre>

为了便于后续推送,建议先给远程Git更名为origin
<pre><code>
git remote add origin git@github.com:yourRepos_name
</code></pre>

完成此次修改的推送:
<pre><code>
git push -u origin master
</code></pre>

写在后面

文章只是一次入门的体验,更多、更强大的操作都在Pro Git官方推荐教程中,快去探索吧……

附录:Git基本常用命令

  • mkdir: XX (创建一个空目录 XX指目录名)
  • pwd: 显示当前目录的路径。
  • git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
  • git add XX 把xx文件添加到暂存区去。
  • git commit –m “XX” 提交文件 –m 后面的是注释。
  • git status 查看仓库状态
  • git diff XX 查看XX文件修改了那些内容
  • git log 查看历史记录
  • git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一个版本
  • cat XX 查看XX文件内容
  • git reflog 查看历史记录的版本号id
  • git checkout -- XX 把XX文件在工作区的修改全部撤销。
  • git rm XX 删除XX文件
  • git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库
  • git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
  • git clone https://github.com/tugenhua0707/testgit 从远程库中克隆
  • git checkout –b dev 创建dev分支 并切换到dev分支上
  • git branch 查看当前所有的分支
  • git checkout master 切换回master分支
  • git merge dev 在当前的分支上合并dev分支
  • git branch –d dev 删除dev分支
  • git branch name 创建分支
  • git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
  • git stash list 查看所有被隐藏的文件列表
  • git stash apply 恢复被隐藏的文件,但是内容不删除
  • git stash drop 删除文件
  • git stash pop 恢复文件的同时 也删除文件
  • git remote 查看远程库的信息
  • git remote –v 查看远程库的详细信息
  • git push origin master Git会把master分支推送到远程库对应的远程分支上
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容