Git是何方神圣?

Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态)。另一个状态可以是不同的文件,也可以是不同的文件内容。举个例子,你可以将文件集合转换到两天之前的状态,或者你可以在生产代码和实验性质的代码之间进行切换。文件集合往往被称作是“源代码”。在一个分布版本控制系统中,每个人都有一份完整的源代码(包括源代码所有的历史记录信息),而且可以对这个本地的数据进行操作。分布版本控制系统不需要一个集中式的代码仓库。

当你对本地的源代码进行了修改,你可以标注他们跟下一个版本相关(将他们加到index中),然后提交到仓库中来(commit)。Git保存了所有的版本信息,所以你可以转换你的源代码到任何的历史版本。你可以对本地的仓库进行代码的提交,然后与其他的仓库进行同步。你可以使用Git来进行仓库的克隆(clone)操作,完整的复制一个已有的仓库。仓库的所有者可以通过push操作(推送变更到别处的仓库)或者Pull操作(从别处的仓库拉取变更)来同步变更。

Git支持分支功能(branch)。如果你想开发一个新的产品功能,你可以建立一个分支,对这个分支的进行修改,而不至于会影响到主支上的代码。

Git提供了命令行工具;这个教程会使用命令行。你也可以找到图形工具,譬如与Eclipse配套的EGit工具,但是这些都不会在这个教程中进行描述。

Git运行环境

系统:windows

软件:Git-1.8.4-preview20130916.exe

Windows安装git很简单,打开安装文件exe,按提示下一步安装到底OK。

github是一个git项目托管网站

注册地址:https://github.com/signup/free

系统:liunx

软件:git-1.8.4.2.tar.gz

Mac OS X安装

由于mac git的地址http://code.google.com/p/git-osx-installer/被墙,被迫使用源码安装,源码可以从http://kernel.org/pub/software/scm/git/下载,编译源码需要先安装xcode,参考http://developer.apple.com。

编译安装

1、解压

tar xjvf git-1.7.4.1.tar.tar.bz2

2. 编译

cd git-1.7.4.1

./configure --prefix=/usr/local

make

3.安装

sudo make install

等安装完成后输入

$ which git  //查看安装目录

$ git –version  //查看版本

检查安装是否成功,如果看到如图的输出,安装就成功了。

Git安装git

tar zxvf git-1.8.4.2.tar.gz

cd git-{date} 我这里是git-1.8.4.2的版本,所以我的命令是cd git-1.8.4.2/

autoconf

./configure

make

make install

make和make install在这里最好分开执行,免得有错不知道.

git --version

git version 1.7.10

首先注册一个github账号

打开git bash进入命令窗口

$ cd ~/.ssh//检查计算机ssh密钥

如果没有提示:No such file or directory 说明你不是第一次使用git,执行下面的操作,清理原有ssh密钥

$ ls//查看目录下是否存在ssh密钥

生成ssh密钥

$ ssh-keygen -t rsa -C ‘xxx@xxx.xxx’//填写email地址,然后一直“回车”ok

$ cat id_rsa.pub   //查看生成ssh密钥内容复制

用申请的github账号登陆github系统。点击右上角的 Account Settings--->SSH Public keys ---> add another public keys,把复制的ssh密钥填写进去,点击 add key 就ok了。

接着打开git ,测试连接是否成功

$ ssh -T git@github.com

如果提示:Hi defnngj You've successfully authenticated, but GitHub does not provide shell access. 说明你连接成功了。

设置用户信息

$ git config --global user.name "HavenShen"//给自己起个用户名

$ git config --global user.email  "havenshen@gmail.com"//填写自己的邮箱

回到github首页,点击页面右下角“New Repository”。

填写项目信息:

project name: hello world

description : my first project

点击“Create Repository” ; 现在完成了一个项目在github上的创建。

克隆项目

我们需要使用git在本地克隆一个相同的项目。

打开git bash进入命令窗口

$ git clone git@github.com:HavenShen/hello-world.git

使用git clone git@github.com:HavenShen/hello-world.git就把git远程仓库的项目克隆到本地了。

初始化项目

$ cd hello-world//进入项目目录

$ git init//命令主要用于创建一个空的git仓库或者重新初始化一个已存在的仓库。

测试上传一个文件

基本操作

$ touch hello-world.txt//创建一个txt文件

$ git add hello-world.txt//执行add添加操作

$ git commit -m 'first commit'//提交更新,并注释信息“first commit”

$ git push -u origin master   //将本地项目更新到github项目上去

进入github网站查看远程仓库里就多了一个 hello-world.txt文件。

分支

查看分支

$ git branch//查看分支

以上master是默认主干*表示当前工作目录在master主干操作

创建新的分枝

$ git branch experiment//创建新分支

$ git branch//查看分支

可以看到现在多了一个experiment分支。

切换分支

$ git checkout experiment//切换到experiment分支

以上命令就切换到experiment分支目录下可以进行操作了。

$ touch branch.txt//创建一个txt文件

$ git add branch.txt//执行add添加操作

$ git commit -m 'branch commit'//提交更新,并注释信息“branch commit”

$ git push -u origin experiment//更新到github experiment分支项目上去

打开github官网查看hello-world远程仓库

Master仓库

Experiment仓库

可以看出experiment仓库比master仓库多了一个branch.txt文件也就是我们刚在experiment仓库中创建、更新、提交、发布到远程仓库的branch.txt

合并和移除无用分枝

$ git checkout master//切换到master仓库

$ git merge experiment//把experiment仓库合并到master仓库

$ git push -u origin master//发布远程仓库master上

上图可以看到master多了一个从experiment分支中合并过来的一个branch.txt文件。

删除分支

$ git branch –d experiment//删除分支

$ git branch//查看分支

上图可以看到experiment分支已经删除了。

以上操作基本上可以满足日常操作。

附:

标签

标签可以针对某一时间点的版本做标记,常用于版本发布。

列出标签

$ git tag # 在控制台打印出当前仓库的所有标签

$ git tag -l 'v0.1.*' # 搜索符合模式的标签

打标签

git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。建议使用附注标签。

# 创建轻量标签

$ git tag v0.1.2-light

# 创建附注标签

$ git tag -a v0.1.2 -m "发布0.1.2版本"

创建轻量标签不需要传递参数,直接指定标签名称即可。

创建附注标签时,参数a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。

切换到标签

与切换分支命令相同,用git checkout [tagname]

查看标签信息

用git show命令可以查看标签的版本信息:

$ git show v0.1.2

删除标签

误打或需要修改标签时,需要先将标签删除,再打新标签。

$ git tag -d v0.1.2 # 删除标签

参数d即delete的缩写,意为删除其后指定的标签。

补打标签

打标签不必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和(通过git log获取)。

# 补打标签

$ git tag -a v0.1.1 9fbc3d0

标签发布

通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:

$ git push origin v0.1.2 # 将v0.1.2标签提交到git服务器

$ git push origin --tags # 将本地所有标签一次性提交到git服务器

日志

git log  查看 当前分支的 提交历史

在提交了若干更新之后,想回顾下提交历史,可以使用 git log 命令查看

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。看到了吗,每次更新都有一个 SHA-1 校验和、作者的名字 和 电子邮件地址、提交时间,最后缩进一个段落显示提交说明。

git log 有许多选项可以帮助你搜寻感兴趣的提交,接下来我们介绍些最常用的。

我们常用 -p 选项 展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:

$ git log -p -2

此外,还有许多摘要选项可以用,比如 --stat,仅简要的显示 文件 增改行数统计,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计。

$ git log --stat

--author 仅显示指定作者相关的提交。

$ git log  --author=haiwang

查找 haiwang 提交的 版本;

差异

git diff

可以用来比较:

1.staging area和working area的文件 (无其他参数时)

[plain] view plaincopyprint?

git diff

2.master分支和working area的文件 (用master参数)

[plain] view plaincopyprint?

git diff master

3.HEAD指向的内容和working area的文件

[plain] view plaincopyprint?

git diff HEAD

4.用远程master分支比较当前工作区

[plain] view plaincopyprint?

git diff refs/remotes/origin/master

5.经常还要用到master分支的某个文件的历史版本和working area的该文件的比较

[plain] view plaincopyprint?

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./socket_helper.cpp

上面的命令中, diff后面的参数指的是commit id, ./socket_helper.cpp是要比较的文件路径。

diff的命令输出格式注意:

[plain] view plaincopyprint?

---代表源文件

+++代表目标文件

通常working area的文件都是被当作目标文件来看待。

-开头的行,是只出现在源文件中的行

+开头的行,是只出现在目标文件中的行

空格开头的行,是源文件和目标文件中都出现的行

差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。

1.某个提交记录0c5ee代表的socket_helper.cpp文件是源文件,当前working area的socket_helper文件是目标文件。

2.在源文件第4行开始的6行和目标文件第4行开始的7行构成一个差异小结

3.这个差异小结中,目标文件添加了一行#include "helper/time_measure.h"

4.其他空格开头的行表明没有差异。

Git fetch和git pull

Git中从远程的分支获取最新的版本到本地有这样2个命令:

1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge

git fetch origin master

git log -p master..origin/master

git merge origin/master

以上命令的含义:

首先从远程的origin的master主分支下载最新的版本到origin/master分支上

然后比较本地的master分支和origin/master分支的差别

最后进行合并

上述过程其实可以用以下更清晰的方式来进行:

git fetch origin master:tmp

git diff tmp

git merge tmp

从远程获取最新的版本到本地的test分支上之后再进行比较合并

2. git pull:相当于是从远程获取最新版本并merge到本地

git pull origin master

上述命令其实相当于git fetch 和 git merge

在实际使用中,git fetch更安全一些

因为在merge前,我们可以查看更新情况,然后再决定是否合并

结束

远程仓库相关命令

检出仓库:$ git clone git://github.com/jquery/jquery.git

查看远程仓库:$ git remote –v

添加远程仓库:$ git remote add [name] [url]

删除远程仓库:$ git remote rm [name]

拉取远程仓库:$ git pull [remoteName] [localBranchName]

推送远程仓库:$ git push [remoteName] [localBranchName]

分支(branch)操作相关命令查看本地分支:$ git branch

查看远程分支:$ git branch –r

创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支

切换分支:$ git checkout [name]

创建新分支并立即切换到新分支:$ git checkout -b [name]

删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并创建远程分支

(本地分支push到远程):$ git push origin [name]

删除远程分支:$ git push origin :heads/[name]

版本(tag)操作相关命令查看版本:$ git tag

创建版本:$ git tag [name]

删除版本:$ git tag -d [name]

查看远程版本:$ git tag –r

创建远程版本(本地版本push到远程):$ git push origin [name]

删除远程版本:$ git push origin :refs/tags/[name]

子模块(submodule)相关操作命令添加子模块:$ git submodule add [url] [path]

初始化子模块:$ git submodule init  ----只在首次检出仓库时运行一次就行

更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下

删除子模块:$ git rm --cached [path]

忽略一些文件、文件夹不提交在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如targetbin*.db

阅读资料

http://www.cnblogs.com/zhangjing230/archive/2012/05/09/2489745.html#git

http://fsjoy.blog.51cto.com/search.php?

http://www.csser.com/tag/git/boards

转载于:https://www.cnblogs.com/havenshen/p/3493522.html

Git配置安装使用教程操作github上传克隆数据相关推荐

  1. 如何通过Git GUI将自己本地的项目上传至Github

    ithud是一个程序员以后成长都会使用到的,先不说很多优秀的开源框架都在这上面发布,光是用来管理自己的demo都已经让人感到很方便,用得也很顺畅.而真正让我下定决心使用github的原因是因为两次误操 ...

  2. Github上传代码菜鸟超详细教程

    最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...

  3. GITHUB上传文件方法教程

    如何在GITHUB上上传自己项目代码 之前我在想如何在githun上传自己的代码时,作为小白根本不知道怎么做,百度了许久也没找到正确的方法...今天我就把完整教程放这里.分享给同样想在github上传 ...

  4. github上传文件夹教程

    github上传文件夹教程 打开git,创建文件 选择本地库 在Remote菜单里选择add- 添加Name和Location 点击下面按钮

  5. 用Git向gitHub上传项目

    用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config -- ...

  6. 使用Git向GitHub上传代码

    如果你对Git还一无所知,建议你先看一下初识版本控制工具Git,对Git有一定的了解后再来看这篇文章.如果你对Git有一定的了解并且已经配置好SSH key,只是想了解如何将代码上传到GitHub,那 ...

  7. 使用Git向Github上传项目(包含大文件>25mb)

    在确认安装好Git和Git-lfs以后切换到项目对应的目录下 (红框中的三个文件是使用Git的过程中生成的,本来应该没有) 右键选择以Git Bash打开 输入代码 建立链接的路径是在GitHub中创 ...

  8. 计算机中Git配置环境变量 - 教程篇

    计算机中Git配置环境变量 - 教程篇 准备工作: 下载Git,vscode 配置环境变量 计算机 > 属性(右击)> 高级系统设置 > 环境变量 > 系统变量下的Path & ...

  9. 怎样在GitHub上传自己的项目

    一.在GitHub上注册一个账号. 二.下载安装安装Git for Windows 三. 1.在GitHub上新建一个仓库 2. 3.复制一下,待会使用 4.右键要上传的项目,选择git bash h ...

最新文章

  1. Silverlight 4正式版发布
  2. 计算机科学与技术python方向是什么意思-计算机科学与技术专业大学应该掌握什么样的基本技能?...
  3. python教程廖雪峰云-Python教程
  4. Ubuntu 更新后 VirtualBox 无法启动
  5. python打印星星居中_python实现while循环打印星星的四种形状
  6. halocn标定找旋转中心_机器人工具坐标系标定原理
  7. 图论 —— 图的连通性 —— 有桥连通图加边变边双连通图
  8. mysql poolsize_thread_pool_size的调整
  9. 给Hexo主题博客加入百度站点统计
  10. mysql候选关键字_MySQL Key值(PRI, UNI, MUL)的含义、超键(super key)、候选键(candidate key)、主键(primary key)...
  11. 如何恢复磁盘中被删除的数据
  12. 借助微博实时号日引流200精准客源,微博实时号是什么?
  13. MySQL 主从幂等复制slave_exec_mode=IDEMPOTENT
  14. unity 数字键的输入及刚体的速度的设置
  15. centos图像界面和dos界面之间切换
  16. scrapy框架基础学习之囧事百科
  17. 程序员是学历与能力,哪个重要呢?本文告诉你!
  18. 贝叶斯公式——假阳性问题
  19. web前端期末大作业(月饼美食网站) html+css+javascript网页设计实例 企业网站制作...
  20. 初识神经辐射场NeRF

热门文章

  1. 双水泵轮换工作原理图_周宁气压给水设备控制柜原理图
  2. return 0可以不加吗_拼多多开店可以不交保证金? 拼多多0元开店是真的吗?
  3. android xml图片旋转,如何在Android中进行平滑的图像旋转?
  4. 云主机挂载硬盘 - 开机自动挂载 fdisk and parted
  5. STM32F103高级定时器使用
  6. (零)ubuntu下制作最小deb包
  7. Linux下文件开头的feff的问题
  8. Qt 信号槽 signals slots 特点 限定符的区别
  9. 面试中关于Redis的问题看这篇就够了
  10. 【Machine Learning】监督学习、非监督学习及强化学习对比