小白入门
——如何从0开始,提交自己的代码到远程
1. 先确保自己下好了git:
检查是否安装git的命令:git version
安装git命令sudo apt-get install git
偷偷补充一下mac上如何下载git:
1、通过homebrew安装Git
·首先,若未安装homebrew,需安装homebrew(一般mac会自带的)
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
· 命令行安装git
brew install git2、通过Xcode安装
直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。Windows上如何下载git:
似乎直接在官网上下下来安装包就OK了
2. 配置git用户、邮箱:(后续连接远程和提交代码都要用,一定记得配置为自己信息)
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
**3. 获取连接远程许可: **
不是谁都可以随便往我们的代码仓库提交东西
ssh命令生成密钥(钥匙–许可,用于告知仓库自己拥有打开的权限):ssh-keygen -t rsa -C “email@example.com”
注意执行命令后需要进行3次或4次确认(建议一路回车):
- 确认秘钥的保存路径(如果不需要改路径则直接回车);
- 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
- 创建密码(如果不需要密码则直接回车);
- 确认密码;
创建好了密钥,接下来就是找到它:cat ~/.ssh/id_rsa.pub
然后终端中会显示一小段乱码,将其复制下来 (**注意一定全部复制,从我们命令的下面一行起,不要有任何遗漏,遗漏会导致连接无法成功 **),
接着到gerrit-settings中的ssh-public key中新建一个key,讲刚刚复制的密钥内容粘贴进去( 其它的代码管理平台也是一样的套路 )
4. 获取远程项目
很好,走到这里我们已经做好了全部的准备工作,可以正式开始加入大队伍,拉取代码、提交代码了。
首先,我们先将远程大佬们建好的我们要加入的项目直接克隆到本地一份,
这里依然要注意一下,git执行完克隆命令会自动将文件放置在当前目录下的。
所以一定一定先选好位置,确保自己的项目克隆到你想要的位置,不然克隆完发现放到了自己不想放的地方或者甚至找不到就尴尬了,
这个克隆命令一般平台会自动生成,我们找到对应的地方去复制就好,是类似下面的命令:
git clone ssh://XXXXXX.git@xxxxx.com/projetName
(在gerrit中呢,就到Project-list中找项目,点进去就直接可以看到啦)
(这里介绍的是小白同志参与项目建设所需的过程,所以是拉取项目代码,而非新建项目)
这里可能会遇到这样的问题:
Unable to negotiate with xx.xx.x.xxx port xxxx: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
这是Git server和client使用的ssh key解析算法不一致导致的问题,client默认使用新的key exchange method,而server只提供 diffie-hellman-group1-sha1 方法,因此无法正常建立链接。
解决方法:
在.ssh文件夹( 一般在当前用户的家目录~下)中编辑config文件 ( 如果没有、直接新建: vim config ), 在config文件中保存以下内容:(注意*号与Host间有空格) Host * KexAlgorithms +diffie-hellman-group1-sha1
5. 提交代码
本地修改/增加完成后,提交文件:
-
创建并切换到新分支( 基于master ) :
`$ git checkout -b 功能分支名 //创建并切换到新分支 //-b 是新建分支并切换( 一般不用 )、不加是直接切,add-demo是分支名 】
**branch有这么三条命令,都是我们很常用的: **
(这里有一篇专门的git教程,解释branch的原理解释得很透彻,推荐一下:
https://git-scm.com/book/zh/v2/Git-分支-分支简介
真的是非常好,有时间可以全部看一下,对git会有进一步的理解)
下面先粗略地介绍这三条命令:
`$ git checkout 功能分支名 //切换到已有的某个分支 (我自己基本都直接用vscode自带的branch管理器,直接点,好找好操作, vscode——值得拥有,所以一般命令行用上面的 `checkcout -b` 多一点) `$ git branch //查看本地现有的所有分支(现在所在的分支会被着重标出) `$ git branch -d 功能分支名 //删除不再用的分支 (这个分支中有内容的话,是删不掉的,需要用 `-D`才好使, 但是请一定确认不再使用再删除,删除的分支是可以恢复,但还是有点麻烦的)
-
确认文件状态:
`$ git status` //显示暂存区及还未暂存的改变(已存为绿色,未存为红色,commit之后这里就啥也没有啦)
-
将修改后的内容保存到暂存区:
`$ git add . //这表示将所有文件中的改变都暂存,一般来说这就够用了
-
将所有暂存区文件提交到本地仓库(commit前一般要再add一下,确保将所有的改变都提交了):
这里注意commit请保持只有一个commit,负责后面会出现提交失败的问题
(git不知道你要提交哪个commit中的修改)
`$ git commit //新建一个commit,在我们的gerrit中一个patch中只有第一次提交会用这个命令,之后请一定都用下面命令: `$ git commit —amend //直接修改上一次的提交(不会生成新的commit)
-
提交前,最好切换到master分支、更新一下项目:
( 这个操作可以不用每次都进行,但是最好隔一小段时间就来一次,确保自己本地的分支与整个项目的进度保持一致 )
`$ git checkout master //切换到master分支 `$ git pull origin master //拉取远程代码、更新本地分支内容 切换到功能分支,并应用master分支的更改: `$ git checkout功能分支名 //切换到自己的patch分支 `$ git rebase master() //应用在master分支远程拉取到的信息更新 此时会出现合并冲突的问题,因为你本地做了一定的改动,会和pull下来的信息不一致,需要手动解决一下 然后需要终止rebase操作,不然在rebase状态(git 会切到一个暂时存在的分支,专门用于解决冲突,所以这时你也并不在自己的分支里)是不能够进行提交操作的,所以要进行以下操作:
-
结束rebase状态:
`$ git rebase —continue //合并了冲突(将你解决后的变化归入这个commit)
-
正式向远程提交:
`$ git review
中途遇到问题需要切换其它分支或其它什么操作时,可以对现在的本地工作进度进行存档:
(stash命令用得好可以解决很多开发过程中的问题,这个单独会开一个附加文件来讲)
`$ git stash //当前工作现场存档 `$ git stash list //查看stash list `$ git stash pop //工作现场恢复(同时会删除stash list中的第一条)
后续附加内容:
git中还有不少点很值得更深入的了解:
- commit
- rebase
- stash
- reset
这些会在后续分不同的小文章进行介绍
一点友善的提示:
这里还要提到一点,git很多时候非常的友好,大部分出错的情况下它都会给出一些切实可行的方案,注意留意提示信息哦
以及,不要记着用git提供给我们的提示中的命令,最好先查一下资料,避免产生一些不可挽回的损失