git 使用简单总结
git 使用简介
Git的简明
我试着写一下git的简单使用说明,如有错误的地方,欢迎斧正.
首先,下载并安装git.(废话)
生成公钥秘钥,并绑定到gogs
代码管理中心上.
在初次使用git的时候需要做的一件事,之后使用过程中不需要这么做了.
可以把这个过程认为是一个认证过程.我以我的理解讲解一下.详细的可以参考
https://help.github.com/articles/generating-an-ssh-key/
简单的说,2个步骤
1. 生成秘钥.公钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
2. 绑定到 代码托管中心服务器中 .在个人页面 -> 用户设置 ->管理SSH密钥-> 增加密钥
将生成的id_rsa.pub(这个文件所在的目录是C:/users/XXX/.ssh/id_sra.pub) 拷贝到 密钥内容部分.
至此,绑定完成.
在以后的使用中,你的每一次提交,每一次clone,每一次push,每一pull,都是这个账号的, 如果你注册了两个git账号,想push操作的话,可以吗? 如果不修改 .gitconfig
文件中的配置, 很有可能因权限问题报错. 在使用中,这一点常常被我们所忽略.
这是一个服务器log的截图
建立远端仓库和本地仓库的关联,并将本地仓库同步到远端.
git是一个分布式的系统. 在远端
(咱们用的也就是那个测试服务器上)和本地端
都有仓库(所谓仓库,也就是你的项目存放的地方). 我们怎么把自己的代码提交到远端的服务器上呢.
主要命令有以下四条.
首先,我们通过浏览器在服务器上建立一个仓库.(最好不要把readme勾选 ). 在你想放该文件的文件夹下面,右键->打开git bash. 执行以下命令
标准做法如下:
git remote add origin http://172.20.17.20:3001/wanglinzhizhi/XXXX.git
就是建立关联的过程 .
然后,当你写好代码(文档,更新内容)后,为说明方面,我们假设完成的文件叫index.html
, 放到这个仓库(文件夹下面) , 然后执行命令.
git add index.html
再然后 , 执行
git commit -m '这是我的一次测试性的更新说明,我更新了index.html文件.对结构进行了优化.'
Notes: 执行完git add XX
和 git commit 'blablabla'
之后 至此本地仓库的commit以及版本已经建立完成. 下一步,我们是将本地的仓库 push到服务器中.让代码保存在服务器中.
最后 ,依然在git bash
中执行命令
git push
然后输入你的gogs的邮箱和密码. 直到显示 ...done
表示提交完成. 至此,我们完成了将本地仓库push到远端仓库. 可以再浏览器中再次打开你刚才创建
,并且clone
,并且push
的仓库了.
😃
Notes : 在使用中非常重要也非常基本的一个命令是, git status
.通过这个命令, 我们可以知道当前的状况.在什么情况下使用呢? 恩, 在不知道当前什么状况的情况下使用.
还有一个比较常用的命令, git XXX -h
. 这里的XXX(比如 push, pull,log 等)git命令, 在不知道git XXX命
令怎么使用的时候, 可以 直接在后面加一个-h
,显示出帮助文件. 像这样(git push -h
, git pull -h
)
个人感觉,这几天的使用经验来说,git是一个很友好的工具, 因为在你输入错误 的情况下,它能够很智能的提示.
总结一下,
每次,远端和本地端的绑定需执行一行代码:
git remote add origin http://172.20.17.20:3001/wanglinzhizhi/XXXX.git
每次git 提交到服务器有三个步骤
git add (你想add的文件.)
git commit -m 'xxxx'
git push
NOTES:
一种不是标准做法的方法,clone
这是一种比较偷懒的方法, 严格意义上说是错误的,因为仅仅对于那些你是master
权限的人才可以这样操作. 因为这么clone之后(或者直接pull) 弄了之后,就建立了关联.
Note: 注意git操作时对应的文件夹(血泪教训(T_T)
一个接近实际中的项目上传实例
我本地有个t6multivan_m(1)M的项目. 我现在要将其传到远端git服务器怎么做呢? 这里是真是用到
git remote add origin XXX
git push -u origin master
的地方.
具体如下:
首先进入到对应项目文件夹 ,然后空白处右键鼠标->git bash
执行命令
git init
我们在本地仓库中先提交项目.操作过程是上面的提交过程
// git status
git add -A
//git status
git commit -m '这是一个接近真实环境的项目上传操作'
到这里,本地的仓库已经完成,现在我们将其push到远端服务器上的仓库中.
-
为了上传到远端的服务器中,我需要先用浏览器,在远端仓库中创建一个仓库.(建议写成同名的)
然后将远端的仓库和本地的仓库关联起来.
在本地git bash中执行以下命令:
git remote add origin http://192.168.15.75:3141/wanglinzhizhi/t6multivanM.git
这条命令使本地端和远端建立关联.
-
最后一步,
git push -u origin master
步骤截图如下:
当第一次建立了仓库之后,以后每次使用的时候最常用的两个命令git pull
, git push
.
我们还会经常使用到的一个命令 git log
或者 git log --graph
. 执行这个命令可以帮助我们查看 历史提交记录.
我觉得一些良好的习惯对于项目管理是有作用的.
- 每天临走之前,git push 一下今天的代码, 第二天来了继续工作之前,git pull 一下,把远端的最新的代码, 同步到本地.
- 每次完成 了重大的部分或者一个单独的单元的时候, git push 一下.
需要注意的是,始终保持远端的仓库是最新的就可以了. 上述的几个命令已经够我们玩转单击版的Git了. 下一节我们将讲解branch 和 merge操作.
另一个比较好的习惯是 **建立一个Git 仓库(Git-repos). 所有的项目都放在这里仓库下面.每个项目只需要一个文件夹,不再需要建立N个zip压缩包,等我们push到服务器之后,谁想下压缩包自己去服务器上去取就够了.
Caching your GitHub password in Git
If you're cloning GitHub repositories using HTTPS, you can use a credential helper to tell Git to remember your GitHub username and password every time it talks to GitHub.
If you clone GitHub repositories using SSH, then you authenticate using SSH keys instead of a username and password. For help setting up an SSH connection, see Generating an SSH Key.
Tip: You need Git 1.7.10 or newer to use the credential helper.
The credential helper is included with GitHub Desktop. The app also provides a Git shell so you won't ever need to install and configure Git manually. For more information, see "Getting Started with GitHub Desktop."
If you prefer working with the command line, you can also install a native Git shell, such as Git for Windows. With Git for Windows, running the following in the command line will store your credentials:
git config --global credential.helper wincred
这是从GitHub 上粘过来的 一段 . 作用是 自动保存密码,不用每次push的时候都输入一遍账号密码,神烦.只需要 在git bash中输入 上面的一行代码, 然后再 输入一次账号密码,以后就再也不需要输入了.(_)
参考资料:
银河系,晚安 😃
- branch and merge (分支与合并操作)
branch 顾名思义就是 建立分支的意思.
在使用branch的功能的时候,我们主要会用到的命令有
git branch
git branch
命令的功能是将分支的名字以列表的形式显示出来.同时可以确定当前所在的分支(* 号表示我们现在所在的分支) .
下面2条命令如下: 作用是在当前的基础上,创建一个新的分支.并把分支命名为AnewBranchDemo
git branch AnewBranchDemo
git checkout AnewBranchDemo
第一句的意思是创建AnewBranchDemo
这个分支,第二句的 意思是 是当前分支为 AnewBranchDemo
这个分支上.(由此我们可以知道,如果我们想切换回master
分支,我们需要做的就是执行git checkout master
即可.)
这两条命令可以简化为1条命令,如下.
git checkout -b AnewBranchDemo
但是个人建议最开始使用的时候还是用上面2条命令比较好. 语义上更加容易理解.
分支是一种很好的东西. 当我们在实现某个功能的时候, 我们需要大面积修改源代码.但是有不想破坏已经修改好的 部分,,如果这里的修改改坏了,改动得太多,连自己都忘了那些地方改了的,那些没改,想回溯就将是已将痛苦不堪的事情了.......
当然 有一种原始的做法是备份一个文件夹放在旁边我们就把备份的文件夹覆盖该坏掉的文件. 这是可以的. 只是麻烦.
我们运用分支的 话,那么我们只需git branch feature-Test
. 然后放心的在feature-Test
做实验,如果这里的实验成功了,我们merge
回到master
中即可. 如果另一种情况,我们改的太多,连自己都不知道那些改了哪些没改的话, 我们可以干脆的放弃掉这个分支. 重新给予master
创建分支 git branch feature-TestB
. 干净利落.
😃
branch 顾名思义就是 建立分支的作用 ,相对分支的是 merge , 合并的作用
主干分支 , master
使我们分支branch
的起点, 也是我们 合并分支的终点.
主干分支一般是作为正式版存在的,我们所有的修改,所有的测试都是在分支上进行,直到我们确定 分支上没有问题之后,我们再将其合并到主干分支上.
合并操作中,我们主要用到的命令如下:
首先, 我们要确定我们要把谁合并到谁上. 假设我们完成了feature-Test 的功能. 我们希望把feature-Test合并到 master中. 那么我们首先需要切换到master上
git checkout master
然后 合并featrue-Test
分支 执行:
git merge --no-ff featrue-Test
Notes: --no-ff 参数的目的是为了在历史记录中明确的记录下本次合并.
done.
创建分支,并且 合并分支就完成了.
总结一下分支和合并过程.
//创建分支
git branch feature-Test // 创建新的分支feature-Test
git checkout feature-Test //从master上切换到 feature-Test
//合并分支
git checkout master //切换到主干分支
git merge --no-ff featrure-true // 合并到主分支.
现在你可以去看看master中是不是多了你刚才写在feature-Test的那段代码.(废话...)
在这个过程中,我们可以有事儿没事儿像之前使用git status
一样,多多使用git branch
和 git log --graph
. 当提交的次数多了,会非常壮观.
😃
最后,别忘了合并会主干之后,git push
到远端 服务器. 用一种拉风的说法,这叫 云备胎(备份)
.
至此,到了这一步,
如果想把版本弄错,或者想改错版本, 提交错版本 将是一件非常困难并且复杂的事情.
:)
代码管理中,如果发生了错误的commit ,或者错误的merge 怎么办呢?
答: 回滚
我们使用命令git log
或者git log --graph
的时候,会看到
commit 后面的一大串字符串. 其实这串字符串是git为我们生成的版本号.
我们的每一次commit , git 都会为我们创建一个新的版本. 所以每一次commit之后都会有一个对应的长长的一大串字符串. 如下图
对于错误的commit 我们需要做的就是回滚到对应的上一个正确的版本
需执行的代码.
git reset --hard c23efd0806f0a117122fdc118f43f6a33905895e
执行上述 reset 回滚操作,我们就回到了对应的版本的代码.
一键还原.
问题来了,那么对于,merge操作导致 的错误呢? 一样的,也是使用
git reset --hard XXXXcommit对应的版本号XXX
git其实还有一些非常常用的功能,
比如
git diff
等
另外一方面,我这里主要在讲解git命令行的使用, 我这里没有提到或者很少提到浏览器中打开的效果.其实浏览器中的效果是十分惊艳的. 截图如下.
这是可视化的git diff 绿色是新添加的代码, 红色是删除的代码。
待发行的版本, 需要看的话,可以直接从这里下载源码.
- 团队合作的git操作 GitFlow
>_
详见GitFlow 工作流
邮件系统
done
- 开启了登录验证
- 开启了Notification
- 开启TSL加密
😃
Notes: 现在暂时使用的是我(linzhizhi.wang@qq.com)邮箱, 半个月后(2016.06.14)换正式的邮箱, 因为 申请时间是半个月....
nginx 反代
building.....