github初级使用

git原理的简单介绍

简单来说,git是一个管理源代码的工具。管理源代码有很多方法,比如说拷贝到移动硬盘,比说使用ftp。但就管理源代码而言,git无疑更加专业而且强大。

粗糙地描述git系统的结构

因为本文主要讲github的使用,所以把github的内容也强塞进来

  1. 本地数据目录
  2. 暂存区
  3. 工作目录
  4. 仓库(github)

对应的4种状态

  1. 已修改(modified)
  2. 已暂存(staged)
  3. 已提交(committed)
  4. 已同步(Synchronized)

准备工作

安装

sudo apt-get install git

配置基本信息

git config --global user.email "hookbrother@gmail.com"
git config --global user.name "hookbrother"

最简单的使用

创建git的本地工作目录

本地的目录有很多,但大多和git没有半毛钱关系,只有初始化的工作目录才是git的。

mkdir ~/git-test
cd ~/git-test
git init

这个时候如果

ls -a

可以看到git-test目录下多了一个.git目录。这个目录的具体内容之后在讲,现在只需要知道这个目录下存储了一些和git-test这个本地工作目录有关的信息。

下载并使用他人的仓库

git clone https://github.com/hookbrother/test.git

这个命令会在把url所指的仓库下载到当前目录下,并且自动初始化成工作目录

创建远程工作目录(仓库)

用之前注册的帐号登陆github,在主页的右上角用户名的右边,点击创建仓库。创建完之后,为了方便,可以为仓库取一个别名,而不用每次同步的时候要输入完整的url。

git remote add git-test https://github.com/hookbrother/test-gt.git

之后就可以用git-test来代替远程仓库的url。

上传

touch README.md
git add README.md
git commit -m "commit test"
git push git-test master

大致的过程如下:

  1. 创建并编辑文件,此时文件状态为已修改(modified)。
  2. 添加文件到暂存区,此时文件状态为已暂存(staged)。
  3. 提交,并附加提交理由。此时文件状态为已提交(committed)。
  4. 同步,同步过程中按提示输入用户名和密码,将local committed同步到仓库,此时文件状态为已同步(Synchronized)。

稍微高级一点的使用

更普遍一点的同步过程

上面仅仅是创建了一个文件,然后同步到仓库,我们在使用中显然会碰到更多的情况。

删除文件

由于某种情况,不再需要某个文件了,比如README.md

rm README.md
git rm README.md

大量的修改

实际上对于一个工程的更新往往会有大量的修改,比如说添加了一些功能或者合并了一些功能,这往往会增加或者删除掉许多文件,对每个文件都git add/rm显然浪费时间。

git add .
git rm -r .
git commit -m "reason"

事实上,可以这样

git add .
git commit -a -m "reason"

.gitignored

如果有一些文件你并不相同步到仓库,那么在你的顶层工作目下新建一个.gitignored的文件,然后在文件里添加类似以下内容(网上抄的,其实好多内容都是):

# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
#  忽略所有.o 和 .a文件.
*.[oa]

.git的简单解释

  1. 试验一下,切换到一个没有.git目录的的目录,使用一些git命令,当然git init和git clone之类的除外,他会提示什么?“fatal: This operation must be run in a work tree“,本操作必须运行在一个工作目录下,什么是一个工作目录,就是有.git目录的目录。
  2. git的配置信息有两种,全局的和局部的,全局的就是user name这类的,局部的就是在.git目录下面的。可以看下.git目录下的config文件里面就有一些,比如remote,比如branch,branch之后会解释。remote就是一个别名对应一个远程仓库的url,只有有了全局和局部的配置信息,你才可以使用git push这类常用功能。
  3. 每个工作目录都是独立的,他和其他工作目录共同使用全局配置,此外他有自己的remote,自己的branch。

使用ssh-key

或许你已经对于每次同步都需要输入用户名和密码忍无可忍了,ssh-key可以帮你免除烦恼。

生成密钥对:

ssh-keygen -t rsa -C "hookbrother@gmail.com"

按默认配置,一路回车。完成后会在~/ssh目录下生成两个文件idrsa,idrsa.pub。

添加 ssh key

登陆到github主页,点击新建仓库旁边的图标,然后在左侧点击SSH Keys,点击Add SSH key,

使用ssh协议同步

在仓库页面的右下角,Download ZIP的上面,可以通过选择不同的协议来查看当前协议下的仓库地址,这里选择SSH,复制到剪贴板,然后:

git remote add ssh-test git@github.com:hookbrother/test-gt.git

分支

对于每一个工作目录,默认会有一个master的分支,通常称之为主分支。

查看分支

git branch

如果你新建一个目录,然后初始化成一个工作目录,再查看分支,你会发现没有分支。因为分支本身是由一个个的提交点组成,如果没有提交点,就没有分支。

创建分支

git branch test

创建完成后查看下分支状态可以看到多了一个test分支,但是master分支前面有个*,说明当前分支是master。

切换分支 sh :eval no-export

git checkout test

在test分支上工作

修改一个文件,然后创建一个文件,完成后git add,git commit。然后回到master分支,会发现增加的文件不见了,并且打开修改过的文件会发现文件没有被修改。切回test分支,又可以看到新建的文件。

分支的作用

就像上面看到的,分支的作用在于你可以新建一个分支,在自己的分支上处理一些事情而不影响到主分支,你也可以上传你的分支,然后让你的小伙伴们同步你的分支和你一起工作。

分支的合并

当你在分支的工作完成,如果觉得这个工作没有意义,用'git branch -d'命令删除此分枝,如果觉得这个工作有意义,将他合并到主分支。合并要先切换到要合并到的分支下(通常是主分支),然后。。。合并。

git checkout master
git merge test

本质上来说,git push/pull也是一种分支的合并。

合并冲突

通常合并会遇到冲突的情况,打开冲突的文件<<<< HEAD和 >>>>之间的内容就是冲突的内容,修改完成后,重新添加提交。

posted on 2013-10-30 23:53  钩哥的哥  阅读(338)  评论(0编辑  收藏  举报

导航