GitHub安装使用教程
一、前言
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"
请千万注意,把上面的 confidentFeng 和 learnGit 替换成你自己的 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的简单步骤:
- 在GitHub上新建一个仓库地址:
http://github.com/......git
- 在需要上传的文件夹目录下,运行
git init
初始化 Git; - 运行
git add
命令,将需要上传的内容放到缓存区; - 运行
git commit -m "上传说明"
,将缓存区的的内容放入到仓库里面; - 运行
git remote add origin http://github.com/......git
,将仓库与 GitHub 仓库联系起来; - 运行
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上传项目遇到的问题(error: failed to push some refs to 'xxx')
GitHub安装使用教程的更多相关文章
- MyEclipse 安装插件 Github安装/使用 教程
2016年02月18日 09:45:23 阅读数:4531 本文的目的是 1.在 Myeclipse10.7中 集成Github并使用. 选择的安装方式是:MyEclipse 中设置下文中1后,下载g ...
- git和github新手安装使用教程(三步入门)
git和github新手安装使用教程(三步入门) 对于新手来说,每次更换设备时,github的安装和配置都会耗费大量时间.主要原因是每次安装时都只关心了[怎么做],而忘记了记住[为什么].本文从操作的 ...
- Linux下的GitHub安装与简单配置教程 ~ 转载
Linux下的GitHub安装与简单配置教程 1.GitHub简介 Git是一个分布式版本控制系统,与其相对的是CVS.SVN等集中式的版本控制系统. 2.Git的安装 1)安装Git a.查看与 ...
- 专为设计师而写的GitHub快速入门教程
专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li 原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...
- Github入门详情教程
前言 之前我写了一篇文章<一篇文章了解Github和Git教程>还延伸了几篇阅读,对大部分小白很有用,那么我继续普及下Github页面及其概念. 定义 GitHub 是一个网站,一个面向开 ...
- NideShop项目的安装部署教程
本文档为微信小程序商城NideShop项目的安装部署教程,欢迎star NideShop商城api服务:https://github.com/tumobi/nideshop NideShop微信小程序 ...
- [Jenkins 新插件] 兼容阿里开发手册 (P3C) 的火线插件安装使用教程
一.前言 火线(Fireline)的Jenkins官方插件已经上线,目前火线不仅能检查出安卓代码中的安全类问题和内存泄露问题,还兼容了阿里开源的Java开发规约(P3C项目),本文将以教程的形式帮助大 ...
- MyEclipse插件github安装使用
MyEclipse插件github安装使用 网络上的介绍一堆堆的,但是自己尝试了下,发现问题很多,就动手做个教程. 大纲 1.git客户端安装 2.ssh配置 3.egit安装配置 4.参考资料 ...
- Ubuntu16.04上安装cudnn教程和opencv
https://blog.csdn.net/wang15061955806/article/details/80791112 Ubuntu16.04上安装cudnn教程 2018年06月24日 14: ...
随机推荐
- [luoguP1021] 邮票面值设计(DFS + dp)
传送门 数据很小,可以DFS,判断的时候用背包DP 然而不知到枚举到哪里.... 首先枚举前可以求一遍题目中的MAX,下一层DFS的时候可以只枚举到MAX + 1,因为再往上就必定会出现断层 蒟蒻很菜 ...
- [BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)
传送门 把数据存在结构体中,至于怎么贪心? 肯定会有些想法,正确错误先不必说,先来试一试. 1.按照 t2 为第一关键字从小到大排,按照 t1 为第二关键字从小到大排 这个显然错,比如后面有个数的 t ...
- 关于struct函数以及重载
1,关于其函数的应用 我们从这里可以看出,void,int,Node,这三种类型,都是可以定义的. 2,重载的方式 如何重载比较符号 这里的比较重载就是小于号,如果前者x比后者x小就返回真 否则返回假 ...
- JPA的一些坑
推荐一篇比较好的介绍JPA的文章:使用 Spring Data JPA 简化 JPA 开发 JPA坑1:不支持Limit查询 JPA是不支持Limit分页查询,而我们有时又因为某些原因不想用JPA提供 ...
- set(集合)数据类型【七】
一.概述:(类似于Java的Set,不允许有重复元素) 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存 ...
- SecurityContextHolder.getContext().getAuthentication()为null的情况
原理: UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication() . ...
- 洛谷 P1166 打保龄球
P1166 打保龄球 题目描述 打保龄球是用一个滚球去打击十个站立的柱,将柱击倒.一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分.一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关, ...
- ASPNET Core 部署 Linux — 使用 Jexus Web Server
第一步 安装.Net Core环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core. 选择对应的系统版本进行安装.安装完成过后 输入命令查看 ...
- 配置文件的备份和IOS 的备份
分享到 QQ空间 新浪微博 百度搜藏 人人网 腾讯微博 开心网 腾讯朋友 百度空间 豆瓣网 搜狐微博 百度新首页 QQ收藏 和讯微博 我的淘宝 百度贴吧 更多... 百度分享 广场 登录 注册 关注此 ...
- struts1与struts2的差别
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结 ...