美文网首页GitHub上有趣的资源Web前端之路程序员
终端推送代码到github详解_Git_Se7ven

终端推送代码到github详解_Git_Se7ven

作者: Se7ven | 来源:发表于2017-06-29 12:10 被阅读90次

OK~~ 这个话题估计百度一大推出来了,而且按照他们的步骤也能完成!例如下面的几个步骤就搞定了:

  1. Github官网 创建一个项目 例如:sh-demo1
  2. git init

  3. git add .

  4. git commit -m '初始化文件'

  5. git push https://github.com/MaWenxing/sh-demo1.git master

  • success!成功的显示如下:推送就是这么简单。。。。
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 351 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/MaWenxing/sh-demo1.git
 * [new branch]      master -> master

But...步骤是很简单,但是还是有很多细节的!下面对具体知识点介绍一下:


总有一条是你喜欢的。。只要坚持看下去


Git的基本使用

  • 查看帮助:git --help
  • 查看命令帮助:git add -h
  • 查看详细帮助:git add --help

基础配置

  • 需要配置:user.nameuser.email
  • 作用:每次 Git 提交时都会引用这两条信息,记录是谁提交了更新
  • 配置用户名: git config --global user.name "用户名"
  • 配置邮箱: git config --global user.email "邮箱地址"
  • 查看配置信息: git config --list
  • 使用 --global 实现全局配置,任何位置使用git都有效

初始化仓库

  • 命令:git init
  • 作用:使用Git管理项目的初始化操作,会创建一个名为.git的隐藏目录
  • 在项目的根目录执行这个命令
  • .git目录:
这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是Git 仓库的骨干。
它是 Git 用来保存元数据和对象数据库的地方。
该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
.git

.git目录结构介绍

1. hooks/:      包含客户端或服务端的钩子脚本(hook scripts)
2. info/:       包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore
               文件中的忽略模式(ignored patterns)
3. objects/:    存储所有数据内容
4. refs/:       存储指向数据(分支)的提交对象的指针
5. config:      存放项目特有的配置选项
6. description: 文件仅供 GitWeb 程序使用,我们无需关心
7. HEAD:        文件保存暂存区信息,一般指向refs下的某文件

跟踪文件

  • 命令:git add+文件路径
  • 作用:将文件由 工作区 添加到 暂存区(Index),暂存文件
  • 例如: git add ./README.md
  • git add .或者 git add --all 再或者 git add -A(简写) 添加所有文件 (个人喜好第一个,来自 Se7ven防止抄袭)
  • git add a.txt b.txt 同时添加两个文件
  • git add *.js 添加当前目录下的所有js文件

提交更新 提交说明

  • 命令:git commit -m 信息 (信息必须要)
  • 作用:将文件由 暂存区 添加到 仓库区(HEAD)
  • 跳过暂存区直接提交:git commit -a -m 提交说明 (合写)
  • 重新提交:git commit --amend
      1. 提交信息输入错误
      1. 遗漏某些需要提交的文件

查看文件状态

  • 命令:git status
  • 命令:git stauts -s 简化日志输出格式
    • ?? 表示未追踪的文件
    • A 表示已经添加暂存区的文件
    • M 表示修改过的文件
    • 右边的M: 表示该文件被修改了但是还没放入暂存区
    • 左边的M: 表示该文件被修改了并放入了暂存区
git status

三个分区:

1、 工作区:开发者的工作目录
2、 暂存区:临时存放工作目录中变更的文件
3 、仓库 :存储提交之后的文件目录

文件的三种状态

已修改(modified)=> 已暂存(staged)=> 已提交(committed)

  • 已修改:表示修改了某个文件,但还没有提交保存
  • 已暂存:表示把已修改的文件放在下次提交时要保存的清单中
  • 已提交:表示该文件已经被安全地保存在本地git仓库中了
状态图

Git工作流程

1 在工作目录中修改某些文件。
2 对修改后的文件进行快照,然后保存到暂存区域。 #git add .
3 提交更新,将保存在暂存区域的文件快照永久转储到.git目录中。# git commit -m "tijiao"
提交图

查看提交日志

  • 命令:git log 查看详细的提交信息
  • 命令:git log --oneline 简洁的日志信息
  • 命令:git reflog 查看所有提交变更操作

版本回退 回滚

  • 命令:git reset --hard [版本号] (版本号个数随意,最好多点)
  • 作用:恢复到已经提交的某一个版本中
  • 作用:回退到指定的版本号
  • 其他方式:git reset --hard head~1
    • 1 表示回到上一次提交
    • 2 表示上上一次提交
    • 0 表示当前提交

忽略文件

  • 作用:忽略一些不需要被git管理的文件
  • 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文
    件,比如日志文件,或者编译过程中创建的临时文件等。!!!
1 在与 .git 隐藏目录同级的目录中创建 `.gitignore` 文件
2 打开 .gitignore 文件,加入忽略文件,例如:/test.html
3 路径是相对于当前 .gitignore文件 的路径
路径写法:
/css/a.css
/css/*.css
/a.html
#忽略 build/ 目录下的所有文件
build/
# 忽略后缀名为 .a 的所有文件
*.a
# !表示取反,继续追踪名为:lib.a 的文件
!lib.a
# 只忽略根目录下的 TODO文件夹,不包含 subdir/TODO
/TODO
# 忽略build下的所有文件
build/
# 忽略doc/notes.txt, 但 doc/server/arch.txt 不会忽略
doc/*.txt
# 忽略 doc/ 文件夹下所有后缀名为 .pdf 的文件
doc/**/*.pdf

1 使用# 表示注释,例如:# 这是注释内容
2 使用*表示通配符,匹配所有文件,例如:/css/*.css

分支 (超重要,一个不会分支的码农别说是程序员)

  • 查看分支git branch当前分支会标有一个*
  • 创建分支git branch [分支名称]
    分支中的代码,与创建那一刻主分支中的内容完全相同
  • 切换分支git checkout [分支名称]
    • 切换分支之前, 必须在当前分支中完成所有的提交
  • (简写)创建并切换分支:git checkout -b [分支名称]
  • 合并分支git merge [其他分支名称],即:将其他分支合并到当前分支
  • 删除分支git branch -d [分支名称]

合并分支冲突

注意:合并分支时出现冲突只能手动处理文件,然后,再次提交

如果在一个从分支中做了修改,然后,在主分支中也做了修改。
此时,将这个从分支合并到主分支的时候,就会出现合并冲突的问题!
在两个分支中同时修改了一个文件中的内容,此时,就会造成合并分支冲突
,如果发生了合并冲突,需要我们`手动解决`!
1 `决定保留哪个分支中的内容`
2 `重新提交`
操作:将 hotfix 分支,合并到cart分支中
HEAD:表示当前分支
hotfix: 表示被合并分支
 <<<<<<< HEAD
        <span>第三次修改的内容</span>
        <cart>这是在 cart 分支中提交的内容</cart>
 =======
        <span>第三次修改的内容 --- hotfix 修改bug</span>
 >>>>>>> hotfix

分支的说明

  • 1 开发的项目都是由多个分支组成:主分支 + dev分支
  • 2 项目经理新建项目仓库,所有的程序员都从这个仓库中获取代码,完成开发任务
  • 3 项目经理:搭建设计仓库,创建master分支,以及dev分支(以及 debug分支等)
  • 4 所有的程序员在 dev分支 上进行开发,并且还有自己维护的分支
  • 5 程序员在分支上完成开发任务后,会提交合并请求
  • 6 项目经理安排测试,如果没有问题了,最后才会与 master 分支合并

远程仓库操作


将代码提交到远程仓库(HTTPS)

  • 1 在本地创建仓库
    • git init
    • git config
  • 2 新建 README.md 文件,并输入任意内容
  • 3 将 README.md 提交到本地
    • git add
    • git commit
  • 4 在github中新建仓库,并拿到仓库地址
  • 5 使用命令 git push [仓库地址] master 提交内容到github的默认分支
  • 6 刷新github仓库页面,在线修改 README.md 文件,并提交
  • 7 使用命令 git pull [仓库地址] master 获取仓库中的最新内容

获取远程仓库内容

  • 命令:git pull [仓库地址] [分支名称] 获取远程仓库最新内容
  • 命令:git clone [仓库地址] [自定义本地仓库名] 将整个仓库克隆到本地
    • 实例:git clone git://github.com/jquery/jquery.git myJQ
  • 当你执行 git clone 命令的时候,默认配
    置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来

简化操作

回到开始:看那个推送:

git push https://github.com/MaWenxing/sh-demo1.git master

如果每次更新推送,难道都要把这全部复制一遍吗???是不是觉得这样很坑呢???那么来简化吧!

简化操作效果一:
1. git remote add origin  https://github.com/MaWenxing/sh-demo1.git
2. git push  origin master

详解一:

    1. git remote add origin 仓库地址
    • origin 可以是任意的名称,比如:abc
    • 作用:使用origin代替 仓库地址 ,方便操作
    • origin就相当于js的变量[仓库地址]就相当于变量的值
    • 重命名:git remote rename origin abc
    • 删除: git remote rm origin
    • 查看 remote的变量 : git remote
    1. 设置以后,推送操作命令 git push origin master
简化操作效果二:
1. git remote add origin  https://github.com/MaWenxing/sh-demo1.git
2. git push -u origin master
3. git push origin
以后拉取:
4. git pull origin

详解二:

    1. 2省略
    1. git push -u origin master
      作用:-u 参数将origin与master在一起 : unit
    1. 使用简化命令 'git push origin' 就代替原来:"git push [仓库地址] master"
    1. 以后拉取命令: git pull origin

SSH介绍

非对称加密、公钥和私钥

GitHub 需要识别出你推送的提交确实是你推送的,而不是别人冒充的,
而 Git 支持 SSH 协议,所以,GitHub 只要知道了你的公钥,
就可以确认只有你自己才能推送,从而省去每次输入密码的操作。
可以同时设置多个SSH key,比如:你可以在公司电脑提交需要一个key,
回家后自己的电脑提交也需要一个key
ssh是一种安全的传输模式
github要求推送代码的用户是合法的,所以每次推送时候都要输入账号密码,
用以验证你是否为合法用户,为了省去每次都要输入密码的步骤,采用shh公钥,密钥
也就是你说的sshkey来验证你是否为合法用户
在你的电脑生成了一个唯一的ssh公钥和私钥,公钥放到github上面,当你推送的时候,git就会
匹配你的私钥是否跟github上面的公钥是配对的,正确就认为你是合法的,允许推送。
sshkey可以理解为是你的身份标识,放在github上面表明你是这个项目的一个开发人员,但是别
人是可以截获的,你本机的私钥别人就无法截获,sshkey就可以保证每次传输都是安全的。

将代码提交到远程仓库(SSH)

  • 1 创建SSH Key:ssh-keygen -t rsa
  • 2 在文件路径 C:\用户\当前用户名\ 找到 .ssh文件夹
  • 3 文件夹中有两个文件:
  • 私钥:id_rsa
  • 公钥:id_rsa.pub
  • 4 在 github -> settings -> SSH and GPG keys页面中,新创建SSH key
  • 5 粘贴 公钥id_rsa.pub内容到对应文本框中
  • 6 在github中新建仓库或者使用现在仓库,拿到git@github.com:用户名/仓库名.git (来自 Se7ven)
  • 7 此后,再次SSH方式与github“通信”,不用输入密码确认身份了

通过 SSH 的方式能够:

  • 实现免密操作(不需要每次都输入用户名和密码)
  • 有利于多人合作开发目的(让多个人都能够操作同一个仓库)

最佳实践

github搭建博客

  • github 提供了 静态服务器 的功能
  • 使用github服务器的 gh-pages 分支
1 在本地工作目录使用git初始化 `git init`
2 创建自己的博客项目
3 将创建好的博客添加到暂存区 `git add [文件路径]`
4 本地提交: `git commit -m "第一个博客"`
5 创建分支:`git branch gh-pages` 分支名称固定!
6 切换分支:`git checkout gh-pages`
7 提交到github:`git push [github仓库地址] gh-pages`
8 查看github中对应的仓库中,是不是提交到了 "gh-pages" 分支
9 访问:<github用户名>.github.io/<仓库名>/<文件名>
10 默认会访问 index.html

动态页面:.jsp / .php / .asp / .aspx

相关文章

网友评论

    本文标题:终端推送代码到github详解_Git_Se7ven

    本文链接:https://www.haomeiwen.com/subject/tnsmcxtx.html