赞
踩
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
他是Linus Torvarlds为了帮助管理linux内核开发而开发的一个开放源码的版本控制软件
Repo 是对 Git 构成补充的多(可以巨多的那种)代码库管理工具,简单说就是使用 Python 在 Git 基础上开发的一系列脚本命令。当前整个 Android 项目(AOSP)就是通过 repo 来管理,最新版本的仓库大约 七百多个
在vnc服务器上生成key
ssh-keygen -t rsa -C xxx@xiaopeng.com; (xxx@xiaopeng.com)是gitlab登录的邮箱账号
第二步回车之后会让你选择生成文件的保存位置和设置密码,文件保存位置默认即可,密码为空,生成之后去默认保存的位置找到.ssh文件夹
在.ssh目录下打开id_rsa.pub,复制里面的内容
登录gitlab,点击右上角的账户
点击setting
点击SSH keys
把id_rsa.pub里面的内容粘贴到Key对应的地方,然后点击Add Key即可
在VNC上下载buildroot代码,如果能下载成功,代表配置成功
下载命令,不需要输入密


git config --list #显示当前git配置信息
git config -e #针对当前仓库配置文件
git config -e --global #针对系统上所有仓库配置文件
git config --global user.name "mahy1"
git config --global user.email mahy1@xiaopeng.com
git --version #获取git版本号

workspace:工作区
Staging area:暂存区/缓存区
Local repository: 版本库或者本地仓库
Remote repository: 远程仓库
| 分类 | 命令 | 说明 | 常用参数或者命令 |
| 提交与修改 | git add | 添加文件到暂存区 |
|
| git status | 查看仓库当前状态 显示有变更的文件 |
| |
| git diff | 比较文件的不同 即暂存区与工作区的差异 |
| |
| git commit | 提交暂存区到本次仓库 |
| |
| git reset | 回退版本 HEAD当前版本 HEAD^上一个版本 HEAD^3上上上一个版本 |
| |
| git rm | 将文件从暂存区和工作区中删除 | ||
| git mv | 移动和重命名工作区文件 | ||
| 提交日志 | git log | 查看历史提交记录 | |
| git blame <file> | 以列表形式查看指定文件的历史修改记录 | ||
| 远程操作 | git remote | 远程仓库操作 | |
| git fetch | 从远程获取代码库 | ||
| git pull | 下载远程代码并合并 | ||
| git push | 上传远程代码并合并 |
| log参数 | 含义 |
| -p | 按照补丁显示每个更新间的差异 |
| --stat | 显示每次更新的修改文件的统计信息 |
| --shortstat | 只显示--stat中最后的行数添加修改删除统计 |
| --name-only | 在已经修改的提交信息后显示文件清单 |
| --name-status | 显示新增,修改和删除的文件清单 |
| --abbrev-commit | 仅显示SHA-1的前几个字符,而非所有的40个字符 |
| --relative-date | 使用较短的相对时间显示 |
| --graph | 显示ASCII图形显示的分支合并历史 |
| --date | 按照规定日期格式显示 |
| pretty参数 | 含义 |
| %H | Commit has |
| %h | Abbeviated commit hash |
| %T | Tree hash |
| %t | Abbreviated tree has |
| %P | Parent hashes |
| %p | Abbreviated parent hashes |
| %an | Author name |
| %aN | Author name |
| %ae | Author email |
| %ad | Author date, RFC2822 style |
| %ad | Author date |
| %aD | Author date, RFC2822 style |
| %ar | Author date, relative |
| %at | Author date, UNIX timestamp |
| %ai | Author date, ISO 8601-like format |
| %aI | Author date, strict ISO 8601 |
| %cn | Commiter name |
| %ce | Commited email |
| %cE | Commite email(respecting .mailmap) |
| %cd | Commited date |
| %cD | Commited date, RFC2822 style |
| %cr | Commited date, relative |
| %ct | Committer date, UNIX timestamp |
| %ci | Commited date, ISO 8601-like format |
| %cI | Commitr date, strict ISO 8601 |
| %d | Ref names |
| %D | Ref names without the , |
| %e | encoding |
| %s | subject |
| %f | Sanitized subject line, suitable for a filename |
| %b | body |
| %B | Raw body |
| %N | Commit notes |
| 参数 | 含义 |
| --after= | 某个日期之后的 |
| --before= | 某个日期之前的 |
| --author= | 某个作者的 |
| --grep= | |
| - - | 按照文件搜索 |
| branchname | 按照分支搜索 |
| Since untile | 按照范围搜索 |
| --no-merges | 过滤掉merge信息 |
| -merges | 只显示merge信息 |
| Git log v1.0 | 查询标签之前的commit |
git config --global alias.lm "log --no-merges --color --date=format:'%Y-%m-%d %H:%M:%S' --author='你的名字!自己修改!' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.lms "log --no-merges --color --stat --date=format:'%Y-%m-%d %H:%M:%S' --author='你的名字!自己修改!' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.ls "log --no-merges --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.lss "log --no-merges --color --stat --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
5.3 分支管理命令
git分支实际上是指向更改快照的指针。
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录
当我们切换到 testing 分支的时候,我们添加的新文件 被移除了。切换回 master 分支的时候,它们又重新出现了
git branch (branchname) #创建分支命令
git checkout (branchname) #切换分支命令
git merge #合并分支命令
git branch #列出在本地的分支
git checkout -b (branchname) #创建新分支并立即切换到该分支下
git branch -d (branchname) #删除分支
git log
git log --oneline #查看历史记录的简洁的版本
git log --graph #查看历史中什么时候出现了分支,合并
git log --reverse --oneline #倒序显示
git log --author #查找指定用户的提交日志
git log --oneline --before={3.weeks.ago} --after={2020-04-13}
git blame <file>
git reflog 可查看到所有历史代码修改信息,可用于恢复未备份代码情况下误删代码的问题
git remote #查看有哪些远程仓库
git remote -v #可以看到每个别名的实际链接地址
git fetch origin
git merge origin/master #更新远程仓库
git push origin master #推送新分支和数据到远程仓库
git remote rm [别名] #删除远程仓库
git tag -a v1.0 #创建带注解的标签
git log --decorate #可以查看标签
git tag -a v0.9 85fc7e7 #根据patch id来打标签
git tag #查看所有标签
git tag -a <tagname> -m "版本标签"
git tag -s <tagname> -m "版本标签" #PGP签名标签
git tag -d v1.1 #删除标签
git show v1.0 #展示标签内容
Repo 管理的核心就在于 Manifest,每个采用 repo 管理的复杂多仓库项目都需要一个对应的 manifest 仓库,如 AOSP 的 manifest ,此仓库用来存储所有子仓库的配置信息,repo 也是读取此仓库的配置文件来进行管理操作。里面的配置就是 xml 定义的结构,一般有两个主要的配置:子仓库用到的仓库地址(remote)、子仓库详细配置信息(project)
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch=".." name="origin" review="https://gitlab.xiaopeng.us"/>
<default remote="origin" revision="master"/>
<project path="cornerstone/device" name ="cornerstone_os/device" >
<linkfile src="XP/common/build.sh" dest="cornerstone/build.sh" />
</project>
<project path="cornerstone/XP_CI/repo" name="cornerstone_repo/repo" />
<project path="cornerstone/manifest" name="cornerstone_repo/manifest" >
<copyfile src="default.xml" dest="cornerstone/default.xml" />
</project>
<project path="cornerstone/rtos/zephyr" name ="cornerstone_rtos/kernel/zephyr" />
<!--...-->
</manifest>
远程仓库地址配置,可以多个。
子项目仓库配置,可以多个。
project 的子节点属性.
project 的子节点属性,类似 copyfile,只是把复制文件变为创建链接文件。
local_manifest 简单说就是一个比 repo init 时设置的 manifest 有更高优先级的本地配置,一般用在不改动远程 manifest 配置又想设置到本地的专属配置时用得到。版本高一点的 repo 下,在工作根目录新建配置文件即可: .repo/local_manifests/local_manifest.xml
有一点需要注意的是如果需要覆盖主 manifest 文件已有 project 的配置那么需要先 remove-project 才行,不然会报错
<remove-project name="project_name" />
<!-- 再重写 project 配置 -->
<project path="xxx" name="xxx" revision="xxxx" remote="xxxx" />
| repo命令 | 等同git命令改造 | 备注 |
| repo init -u <URL> [<OPTIONS>] | 初始化 | |
| repo sync [PROJECT_LIST] |
| 同步代码 |
| repo upload [PROJECT_LIST] |
| 上传代码 |
| repo forall [PROJECT_LIST] -c <COMMAND> |
| 多仓执行 |
| repo start <BRANCH_NAME> [<PROJECT_LIST>] |
| 创建并切换分支 |
| repo checkout <BRANCH_NAME> [<PROJECT_LIST>] |
| 切换分支 |
| repo status [<PROJECT_LIST>] |
| 状态查询 |
| repo branches [<PROJECT_LIST>] |
| 分支查询 |
| repo diff [<PROJECT_LIST >] |
| 文件对比 |
| repo prune [<PROJECT_LIST>] | 删除合并分支 | |
| repo stage –i [<PROJECT_LIST >] |
| 添加文件到暂存区 |
| repo abandon <branchName> [<PROJECT_LIST > ] |
| 删除分支 |
| repo version | 查看版本号 |
-b 选取的 manifest 仓库分支,默认 master
-m 选取的默认配置文件,默认 default.xml
--depth=1 git clone 的深度,一般如在 Jenkins 上打包时可用,加快代码 clone 速度
--repo-url=URL 使用自定义的 git-repo 代码,如前面说到的 fix 了 bug 的 git-repo
--no-repo-verify 不验证 repo 的源码,如果自定义了 repo url 那么这个一般也加上
用于查看指定仓的工作空间,类似于git status,如果不添加参数,则是查看所有仓 。
该命令实际是对git diff命令的封装。用于显示各项目工作区下的文件差异,可指定只显示某一项目工作区下的文件差异
删除指定PROJECT中,已经合并的分支。当在开发分支上代码已经合并到主干分支后,使用该命令就可以删除这个开发分支。随着时间的演进,开发分支会越来越多,在多人开发同一个git库,多开发分支的情况会愈发明显
该命令实际是对git add --interactive命令的封装,用于将项目工作区中的改动添加到暂存区
该命令实际是对git branch -D命令的封装。作用是删除分支
用于显示repo版本号
开发过程中需要用到的常用命令:
九、repo高级命令
十、gitlab工作流程
十一、gitlab基础用法
十二、gitlab高级用法
二十、常见git&repo错误
| 错误类型 | 错误信息提示 | 错误原因 | 错误解决方案 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。