一、前言

Git 是什么?

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统,让程序员团队能够协作开发项目,Git 帮助大家管理为项目所做的工作,避免一个人所做的修改影响其他人所做的修改。你在项目中实现一个新功能的时候,Git 将跟踪你对每个文件所做的修改。确定代码可行后,你将提交所做的修改,而 Git 将记录项目最新的状态,如果你犯了错,想撤销所做的修改,可轻松的返回以前的任何可行状态。

GitHub 是什么?

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名GitHub。

GitHub 于2008年4月10日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。

GitHub的官网:https://github.com/

二、Git客户端的安装

最早 Git 是在 Linux 上开发的,很长一段时间内,Git 客户端只能在 Linux/Unix 系统上运行。随着 Git 的使用逐渐普及,一些开发者也慢慢将 Git 移植到了 Windows 平台上,也就是我们要下载安装的 Git 客户端。

截止博客发布的时间,Git客户端最新版本是 2.22.0。我们可以从官网下载,网速慢的同学请移步GitHub国内下载站,然后按默认选项安装即可。若不放心自己默认安装的,可参考这篇博客 - Git安装教程(windows) 安装。

安装完成后,在开始菜单里找到 “Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明 Git 安装成功!

三、使用Git在GitHub上托管程序

准备工作:Git配置

因为 Git 是分布式版本控制系统,所以,每个机器都必须自报家门:你的用户名和Email地址。你必须提供用户名,但可以使用虚构的电子邮件地址。其实这步可以省略,不需要设置用户名和邮箱也可直接托管程序:

$ git config --global user.name "Username"
$ git config --global user.email "Username@example.com"

注意:git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的 Git 仓库都会使用这个配置。如果只想对某一个仓库指定不同的用户名和Email地址,只要去掉 --global 即可。

下面介绍使用Git在GitHub上托管程序的各步骤。

1. 初始化仓库

跳转到你想进行Git管理的项目目录内,并通过 git init 命令把这个目录变成 Git 可以管理的仓库:

$ cd F:/Project/C++/Qt/learnGit
$ git init
Initialized empty Git repository in F:/Project/C++/Qt/learnGit/.git/

瞬间 Git 就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个 .git 的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了。要是删除这个东西,则会丢弃项目的所有记录。

如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用 ls -ah 命令就可以看见。

注意:如果文件夹名称中间有空格,可以使用\,例如:$ cd F:/C++\ Project/C++

2. 检查状态

在执行其他操作之前,先来看一下状态(项目目录内就一个 main.c 文件):

$ git status
On branch master No commits yet Untracked files:
(use "git add <file>..." to include in what will be committed) main.c nothing added to commit but untracked files present (use "git add" to track)

在 Git 中,分支是项目的一个版本,从这里的输出我们可以知道,我们位于分支 master。

我们每次查看项目的状态时候,输出的都是我们位于分支 master 上,接下里的输出表明,我们将进行初始项目的提交,提交是项目在特定时间的快照。

Git指出了项目中未被跟踪的文件 main.c,因为我们还没有告诉他要跟踪那些文件,接下里我们被告知没有任何东西添加到当前提交里面,但我们可能需要将为跟踪的文件加入仓库。

3. 将文件加入到仓库

执行 git add --all 命令,将需要上传的全部内容放到缓存区,再“检查状态”:

$ git add --all
。。。。。 MINGW64 ~/learnGit (master) $ git status
On branch master No commits yet Changes to be committed:
(use "git rm --cached <file>..." to unstage) new file: main.c

命令 git add ,将项目中未被跟踪的文件都加入到缓存区,它不提交这些文件,而只是让 Git 开始关注他们。然后检查这个项目的状态,发现 Git 找到了需要提交的文件的一些修改,标签 new file 表示这些文件是新加入的。

4. 执行提交

提交(commit)项目中已经被追踪的文件加入到仓库中:

$ git commit -m "ProName_V1.0.0"
[master (root-commit) 5d6ceca] Started project
1 file changed, 1 insertion(+)
create mode 100644 main.c

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。“输出”表明我们在分支master 上,而且有一个文件被修改了

5. 添加远程库

commit 之后,还要将 commit 的代码 push 到远程库,但是首先要添加远程库,执行以下命令:

$ git remote add origin "https://github.com/confidentFeng/learnGit.git"

请千万注意,把上面的 confidentFenglearnGit 替换成你自己的 GitHub 账户名和仓库名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的。另外远程库的名字就是 origin,这是 Git 默认的叫法,也可以改成别的,但是 origin 这个名字一看就知道是远程库。

6. git push到远程分支

这是最后一步,可以把本地库的所有内容推送到远程库上,按照步骤会提示输入用户名和密码:

$ git push -u origin master [-f]
Counting objects: 20, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (20/20), 2.17 KiB | 0 bytes/s, done.
Total 20 (delta 6), reused 0 (delta 0)
To https://github.com/wangmingshun/studygit.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支 master 推送到远程。由于远程库是空的,我们第一次推送 master 分支时,加上了 -u 参数,git不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。

注意:默认分支为 master,这里演示也是用的 master,如果想推送其它分支,需要先切换到该分支,再推送即可。

推送成功后,可以立刻在 GitHub 页面中看到远程库的内容已经和本地一模一样。从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

把本地 master 分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

四、项目上传的步骤总结

总结一下将项目上传到GitHub的简单步骤:

  1. 在GitHub上新建一个仓库地址: http://github.com/......git
  2. 在需要上传的文件夹目录下,运行 git init 初始化 Git;
  3. 运行 git add 命令,将需要上传的内容放到缓存区;
  4. 运行 git commit -m "上传说明",将缓存区的的内容放入到仓库里面;
  5. 运行 git remote add origin http://github.com/......git,将仓库与 GitHub 仓库联系起来;
  6. 运行 git push -u origin master 将文件提交到GitHub仓库里面,这样就完成了文件夹的提交。

五、遇到问题及解决方案

1.  fatal: The remote end hung up unexpectedly

解决方案1:

在使用git推送项目时候出现 fatal: The remote end hung up unexpectedly,原因有可能是推送的文件太大。可以在 .git 目录下面修改生成的 config 文件增加如下:

[http]
postBuffer = 524288000

也可以使用命令设置缓存

$ git config http.postBuffer 524288000

解决方案2:

使用git更新或提交中途有时出现The remote end hung up unexpectedly的异常,特别是资源库在国外的情况下。此问题有可能由网络原因引起。

配置git的最低速度和最低速度时间:

$ git config --global http.lowSpeedLimit 0
$ git config --global http.lowSpeedTime 999999 单位 秒

--global配置对当前用户生效,如果需要对所有用户生效,则用--system

解决方案3:

在使用git推送项目时有可能出现:

fatal: The remote end hung up unexpectedly | 7.00 KiB/s

这句显示 远程结束挂起 |7kb/s

应该是墙的原因导致网速太慢,且项目有点大上传不上

解决办法:“翻墙”或者等等重新再push一遍,就没问题了。

2. curl 56 OpenSSL SSL_read:SSL_ERROR_sysCALL

因为服务器的SSL证书没有经过第三方机构的签署,所以才报错。解决方案如下:

第一步,克隆远程仓库时,用env命令设置GIT_SSL_NO_VERIFY环境变量为”ture”。完整的命令如下:

$ env GIT_SSL_NO_VERIFY=true git clone https://<host_name/git/project.git

第二步,在克隆完毕的仓库中将http.sslVerify设置为”false”。完整的命令如下:

$ git config http.sslVerify "false"

点评:以上方法应该是Git处理可信任的SSL临时证书很好的方法,第一步使用env命令保证了忽略证书错误是单次行为,不会成为默认的设置。第二次,则把忽略证书错误的设置限定在特定的仓库,避免扩大该设置的适用范围而引起的潜在安全风险。

3. error: failed to push some refs to 'xxx'

执行以下命令即可正确推送代码:

$ git push -u origin master-f

4. warning: LF will be replaced by CRLF in xx.c.

在执行 git add --all 命令后,可能出现这种警告。由于Linux中的换行符是LF,而Windows中的换行符是CRLF,如果想用Windows下的git管理来自Linux的文本文件,git会默认将LF转换成CRLF,并发出烦人的warning。解决办法如下:

使用cd命令进入目标仓库的最上层目录执行:

$ git config core.autocrlf false

上述命令指示针对当前仓库的配置,如果想要对本地的所有git仓库都执行禁止自动转换的命令,可以执行git config –global core.autocrlf false命令,但是这样未免牵扯太大。

六、其他命令

1. 基本查询命令:

查看文档:git config --help或者git help config或者 man git-config

查询用户: git config user.name

删除用户: git config --global -- unset user.name

修改用户:git config --global user.name "修改名"

2. 管理分支命令:

查看本地分支:git branch

查看远程分支:git branch -r

查看所有分支:git branch -a

在本地创建新的分支:git branch newbranch

切换到新的分支:git checkout newbranch

创建+切换分支:git checkout -b newbranch

将新分支推送到 github:git push origin newbranch [-f]

删除本地分支:git branch -d newbranch

删除 github 远程分支: git push origin :newbranch (分支名前的冒号代表删除)

七、在同一个仓库上传多个项目

方法1:将多个项目存放在同一个父目录下

在父目录使用 git init ,将父目录变成 Git 可以管理的目录。然后假如想上传 mySerial 工程,则在父目录路径下执行 git add mySerial 命令,将 mySerial 项目文件夹放到缓存区,再按照正常流程上传到 GitHub 即可。这样在同一个仓库的 master 分支下就可以存放多个项目的文件夹。

方法2:在同一个仓库的不同分支上存放不同项目

不在 master 默认分支上存放任何项目文件,因为创建新分支时会自动拷贝 master 分支的内容。 每次要上传一个项目,则创建一个新分支,以该项目名称命名,然后将该项目上传到对应分支,使用 git push origin proBranch 命令。注意是要在项目文件夹内执行 git init 命令。

具体步骤:

$ git init
$ git add --all
$ git commit -m "ProName_V1.0.0"
$ git remote add origin "https://github.com/confidentFeng/learnGit.git"
$ git checkout -b newbranch
$ git push origin newbranch [-f]

八、扩展:GitLab 配置 ssh key

可以参考这2篇文章:

参考:

上传本地代码到gitHub过程详解

浅谈使用git进行版本控制

在github上传项目遇到的问题(error: failed to push some refs to 'xxx')

GitHub创建删除分支

GitHub安装使用教程的更多相关文章

  1. MyEclipse 安装插件 Github安装/使用 教程

    2016年02月18日 09:45:23 阅读数:4531 本文的目的是 1.在 Myeclipse10.7中 集成Github并使用. 选择的安装方式是:MyEclipse 中设置下文中1后,下载g ...

  2. git和github新手安装使用教程(三步入门)

    git和github新手安装使用教程(三步入门) 对于新手来说,每次更换设备时,github的安装和配置都会耗费大量时间.主要原因是每次安装时都只关心了[怎么做],而忘记了记住[为什么].本文从操作的 ...

  3. Linux下的GitHub安装与简单配置教程 ~ 转载

    Linux下的GitHub安装与简单配置教程   1.GitHub简介 Git是一个分布式版本控制系统,与其相对的是CVS.SVN等集中式的版本控制系统. 2.Git的安装 1)安装Git a.查看与 ...

  4. 专为设计师而写的GitHub快速入门教程

    专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li     原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...

  5. Github入门详情教程

    前言 之前我写了一篇文章<一篇文章了解Github和Git教程>还延伸了几篇阅读,对大部分小白很有用,那么我继续普及下Github页面及其概念. 定义 GitHub 是一个网站,一个面向开 ...

  6. NideShop项目的安装部署教程

    本文档为微信小程序商城NideShop项目的安装部署教程,欢迎star NideShop商城api服务:https://github.com/tumobi/nideshop NideShop微信小程序 ...

  7. [Jenkins 新插件] 兼容阿里开发手册 (P3C) 的火线插件安装使用教程

    一.前言 火线(Fireline)的Jenkins官方插件已经上线,目前火线不仅能检查出安卓代码中的安全类问题和内存泄露问题,还兼容了阿里开源的Java开发规约(P3C项目),本文将以教程的形式帮助大 ...

  8. MyEclipse插件github安装使用

    MyEclipse插件github安装使用   网络上的介绍一堆堆的,但是自己尝试了下,发现问题很多,就动手做个教程. 大纲 1.git客户端安装 2.ssh配置 3.egit安装配置 4.参考资料 ...

  9. Ubuntu16.04上安装cudnn教程和opencv

    https://blog.csdn.net/wang15061955806/article/details/80791112 Ubuntu16.04上安装cudnn教程 2018年06月24日 14: ...

随机推荐

  1. [luoguP1021] 邮票面值设计(DFS + dp)

    传送门 数据很小,可以DFS,判断的时候用背包DP 然而不知到枚举到哪里.... 首先枚举前可以求一遍题目中的MAX,下一层DFS的时候可以只枚举到MAX + 1,因为再往上就必定会出现断层 蒟蒻很菜 ...

  2. [BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)

    传送门 把数据存在结构体中,至于怎么贪心? 肯定会有些想法,正确错误先不必说,先来试一试. 1.按照 t2 为第一关键字从小到大排,按照 t1 为第二关键字从小到大排 这个显然错,比如后面有个数的 t ...

  3. 关于struct函数以及重载

    1,关于其函数的应用 我们从这里可以看出,void,int,Node,这三种类型,都是可以定义的. 2,重载的方式 如何重载比较符号 这里的比较重载就是小于号,如果前者x比后者x小就返回真 否则返回假 ...

  4. JPA的一些坑

    推荐一篇比较好的介绍JPA的文章:使用 Spring Data JPA 简化 JPA 开发 JPA坑1:不支持Limit查询 JPA是不支持Limit分页查询,而我们有时又因为某些原因不想用JPA提供 ...

  5. set(集合)数据类型【七】

    一.概述:(类似于Java的Set,不允许有重复元素) 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存 ...

  6. SecurityContextHolder.getContext().getAuthentication()为null的情况

    原理: UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication() . ...

  7. 洛谷 P1166 打保龄球

    P1166 打保龄球 题目描述 打保龄球是用一个滚球去打击十个站立的柱,将柱击倒.一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分.一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关, ...

  8. ASPNET Core 部署 Linux — 使用 Jexus Web Server

    第一步 安装.Net Core环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core. 选择对应的系统版本进行安装.安装完成过后 输入命令查看 ...

  9. 配置文件的备份和IOS 的备份

    分享到 QQ空间 新浪微博 百度搜藏 人人网 腾讯微博 开心网 腾讯朋友 百度空间 豆瓣网 搜狐微博 百度新首页 QQ收藏 和讯微博 我的淘宝 百度贴吧 更多... 百度分享 广场 登录 注册 关注此 ...

  10. struts1与struts2的差别

     Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结 ...