Git的基本操作
Git是一个分布式的版本控制工具,简单易用。
安装:sudo apt-get install git
1、Git配置操作
Git全局配置
配置使用git的用户名:git config --global user.name "GAOKAIKAI958"
配置使用git的邮箱:git config --global user.email "GAOKAIKAI958@pingan.com.cn"
配置颜色提示为打开状态:git config --global color.ui true
设置编辑器:git config --global core.editor gedit
查看当前所有的git配置:git config -l
git config --list
git config --list --show-origin
查看帮助信息:
详细手册帮助:git help <verb>
,例如:git help add
;
简要信息:git <verb> -h
,例如:git add -h
;
2、Git本地环境操作
创建并初始化工作区目录:
git init /path/filepackage
在工作区的根目录下,有一个.git目录(版本库或本地仓库),省略后面选项则在当前目录下创建。
添加到暂存区的内容
git add file_name
git add filepackage_name/
使用该命令可以将工作区相关内容(文件或者文件夹)的改动添加到暂存区。
撤销暂存区添加的内容
git rm --cached file_name
git rm --cached filepackage_name/
将暂存区的内容提交到当前分支上
git commit -m “提交的说明信息”
注意:在工作区中修改内容不能直接commit提交,但可以使用git commit -a -m “提交信息”一个命令既添加到暂存区,紧接着提交到本地仓库分支上,但不建议使用。
重新提交
git add forgotten_file
git commit --amend
查看提交日志
git log
可以使用git log --pretty=oneline
查看简短的提交日志
查看所有的操作日志
git reflog
一旦使用git reset的–hard参数,想回到重置之前的内容,则使用该命令查看操作id,再使用–hard,返回到想到的状态。
查看操作git状态
git status
git status 查看已被暂存的修改或未被暂存的修改;git diff
显示尚未暂存的改动;git diff --staged
,git diff --cached
;
比对已暂存文件与最后一次提交的文件差异;
重置提交id
git reset
重置提交id(commit id)
常用参数:–soft 只是重置提交id,并不修改暂存区和工作区的内容
–herd 重置提交id,并将暂存区和工作区的内容强制恢复到当前重置HEAD后游标指向的commit id状态
eg:git reset --soft HEAD~1 将当前提交id重置到上一次提交状态
git reset --herd HEAD~1 将当前提交id重置到上一次提交,强制恢复暂存区和工作区内容恢复到重置后id的状态
3、GitHub
GitHub是一个代码托管网站。
GitHub代码管理权限操作
在本地操作系统linux上使用命令创建密钥
ssh-keygen -t rsa -C "GAOKAIKAI958@pingan.com.cn"
一般会在用户目录下生成.ssh文件夹:
.ssh/
├── id_rsa
├── id_rsa.pub
└── known_hosts
### 将本机公钥添加到github账户ssh密匙中
在用户设置(user settings)中有SSH keys管理项,可以添加可删除SSH key。
在Add an SSH key栏中存在Key选项、Title选项,在其中分别填入公钥和用户名(邮箱),然后点击Add key。
寻找id_rsa.pub文件里面存放的内容——“公钥”,将其(整个文件中的内容)复制到GitHub中的设置ssh密匙。
在GitHub上创建仓库
在github 新创建一个项目工程,选中Initialize this repository with a README选项,填写初始信息。
在github上的工程目录下可以看到.git地址。但在用本公司的gitlab时,发现需要对其进行简单修改:
原始赋值的地址:http://192.168.4.220/Experimental/NewTechResearch.git
需要修改成: http://192.168.4.220:8080/Experimental/NewTechResearch.git
建立本地仓库与远程仓库映射
在本地创建一个与远程仓库对应的仓库
下载远程仓库至本地,可重命名;git clone <url> new_name
;git clone “远程仓库地址” new_name
;
默认下载master分支,也可以指定分支git clone -b branch_name “远程仓库地址”
操作实例:
下载master分支git clone http://192.168.4.220:8080/Experimental/NewTechResearch.git
下载project/ur_arm分支git clone -b project/ur_arm http://192.168.4.220:8080/Experimental/NewTechResearch.git
下载完成后可git branch
查看分支名称
注意:一般一个目录下只下载一个分支,否则会关系错乱。
添加远程仓库
git remote add <shortname> <url>
重命名远程仓库
git remote rename <old_name> <new_name>
移除远程仓库
git remote remove <name>
建立提交地址
cd “克隆下来的目录(本地仓库)”
注意:一定要切换到clone下来的目录;
建立连接:git remote add 远程主机名(习惯上origin)远程仓库的地址
在本地进行开发修改
在本地仓库中进行项目开发(git add、git commit)
注意:需要将需要同步的代码拷贝至此文件夹下
示例操作:git add moveit_usr
git commit -m 'add ur ros package'
提交本地至远程
git push -u 远程主机名 远程分支 :将本地仓库的修改推送到远程
示例操作:git push -u origin project/ur_arm
将远程同步到本地
git fetch <remote>
这个命令会访问远程仓库,从中拉取所有你还没有的数据。
必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
git pull
如果你的当前分支设置了跟踪远程分支, 那么可以用 git pull 命令来自动抓取后合并该远程分支到当前分支。 这或许是个更加简单舒服的工作流程。
4、git分支管理
创建新分支
git branch
新建分支名
例如创建一个名为project/ur_arm的分支,如下git branch project/ur_arm
但是可能会报错:
fatal: Not a valid object name: ‘master’.
原因是本地还没有创建master,无法建立分支。
解决方法:
$git add .
$git commit -m “depends host”
然后查看分支(git branch),发现存在了master分支,这时可以创建其它分支:git branch project/ur_arm
查看分支
git branch
切换分支
git checkout 分支名
删除分支
git branch -d 分支名
新建并切换分支
git checkout -b 新建分支名
合并分支到当前分支
git merge 合并分支名
将服务器的内容覆盖到本地仓库
git pull 【远程主机名 远程分支】
抓取服务器的内容
git fetch【远程主机名 远程分支】
(与git merge合用)
忽略文件
创建一个名为 .gitignore的文件
*.[oa] # 忽略所有以 .o 或 .a 结尾的文件;
# [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
*~ # 忽略所有名字以波浪符(~)结尾的文件
*.a # 忽略所有的 .a 文件
# 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
!lib.a # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
在最简单的情况下,一个仓库可能只根目录下有一个 .gitignore 文件,它递归地应用到整个仓库中。
子目录下也可以有额外的 .gitignore 文件。子目录中的 .gitignore文件中的规则只作用于它所在的目录中。
Git clone 网速慢的处理
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
解决方法:命令行输入
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
如果依旧clone失败,则首先浅层clone,然后更新远程库到本地
git clone --depth=1 -b project/ur_arm http://192.168.4.220:8080/Experimental/NewTechResearch.git
git fetch --unshallow
提示
fatal: --unshallow on a complete repository does not make sense
这个就是成功了
???
git push <remote> <branch>
你也可以运行 git push origin serverfix:serverfix, 它会做同样的事.
如果并不想让远程仓库上的分支叫做 serverfix,可以运行 git push origin serverfix:awesomebranch
来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch分支。
git checkout -b serverfix origin/serverfix
这会给你一个用于工作的本地分支,并且起点位于 origin/serverfix。
git branch -u origin/serverfix
设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支, 你可以在任意时间使用 -u 或 --set-upstream-to 选项运行 git branch 来显式地设置。