git
本地库初始化 : git init
设置签名
-
形式
- 用户名:niklaus
- email:niklaus.z.lee@gmail.com
-
作用:区分不同的开发人员身份
-
辨析:这里设置的签名和登陆远程库(代码托管中心)的账号、密码没有关系
-
有线级
- 项目级别/仓库级别:仅在当前本地范围内有效
- git config user.name niklaus_pro
- git config user.email niklaus.z.lee@gmail.com
- 信息的位置:.git/config
- 系统用户级别:登陆当前操作系统的用户范围
- git config --global user.name niklaus_pro
- git config --global niklaus.z.lee@gmail.com
- 信息保存位置: ~/.gitconfig
- 优先级别
- 就近原则:项目级别优先于系统级别用户,二者都有时,采用项目级别的签名
- 如果只有系统用户级别签名,就以系统用户级别的签名为准
- 二者都没有不允许
- 项目级别/仓库级别:仅在当前本地范围内有效
命令
- git status : 查看当前状态
- git add filename(eg: git add good.txt):向缓存区添加文件
- git rm --cached filename(eg: git rm --cache good.txt):删除缓存区中的名为filename的文件
- git commit filename(eg: git commit good.txt):把缓存区中的文件提交的本地库
- git commmit -m ‘commit message’ filename
- git log
- HEAD 指针指向当前版本
- git log --pretty=oneline(git log --oneline)
- git reflog(会显示HEAD指针移动到版本的步数)
- git reset --[soft/mixed/hard] 索引值 (eg:git reset --hard 9516fec)
- –soft :仅在本地库移动HEAD指针(本地库)
- –mixed :在本地库移动HEAD指针,并重置暂存区(本地库、暂存区)
- –hard :在本地库移动HEAD指针,并重置暂存区,工作区(本地库、暂存区、工作区)
- 使用符号(只能往后,忘历史记录的方向,一个符号退一步,n表示后退n步):git reset --hard^
- 使用~符号:git reset --hard HEAD~n (n表示后退n步,eg:git reset --hard HEAD~3)
- 删除文件并找回
- 前提: 删除前,文件存在时的状态提交到了本地库
- 操作: git reset --hard [指针位置]
- 删除操作已经提交到本地库:指针位置指向历史记录
- 删除操作尚未提交到本地库:指针位置使用HEAD
- git diff [filename]
- git diff [filename] : 将工作区的文件和暂存区进行比较
- git diff [本地库中历史版本][filename]:将工作区的文件和本地库历史记录比较
- 不带文件名比较多个文件:git diff 比较当前工作区中的所有文件
分支管理 git branc []
分支管理:在版本控制过程中,shiy9ng多条线同时推进多个任务
-
优点:
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可(彼此独立)
-
分支操作
- 查看拥有的分支:git branch -v
- 创建一个分支:git branch [branch_name]
- 在分支间切换:git checkout [branch_name]
- 删除分支:git -d branch [branch_name]
- 删除已经merge了的分支:git branch -d [branch_name]
- 不管是否已经merge,都会对分支进行删除:git branch -D [branch_name]
- 删除远程分支:(查看远程分支命令:git branch -r)git push origin:[branch_name]
- 合并分支
- 第一步:切换到接受修改的分支(被合并,增加新内容)上:git checkout [branch_name(接受修改的分支名)]
- 第二步:执行merge命令:git merge [branch_name]
- 解决冲突(MERGING):
- 第一步:编辑文件,删除特殊符号
- 第二步:把文件修改到满意程度,保存退出
- 第三步:git add [filename]
- 第四步:git commit -m ‘change message’
- 注意:这一步一定不能带文件名
Git 基本原理
-
哈希
- 不管输入的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
- 哈希算法确定,输入数据确定,输出数据能够保证不变
- 哈希算法确定,输入数据变化,输入数据一定变化,而且通常变化很大
- 哈希算法不可逆
-
Git 保存版本的机制
-
集中式版本控制工具:以文件变更列表的方式存储信息。这类系统将他们保存的信息看作是一组基本文件和每个文件随时间逐步积累的差异。
-
Git 把数据看作是小型文件系统的一组快照。每次提交更新Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不在重新存储改文件,而只是保留一个链接指向之前存储的文件。所以Git的工作方式可以称作快照流
-
Git文件管理机制细节
-
分支管理
-
分支切换
-
基本操作总结:
- 状态查看操作:git status (查看工作区、暂存区状态)
- 添加操作:git add [filename] (将工作区的“新建/修改”添加到暂存区)
- 提交操作:git commit -m “commit message” [filename] (将暂存区的内容提交到本地库)
- 查看历史记录操作:git log(git log --pretty=oneline、git log --oneline、git reflog)
- 版本的前进后退:git reset --hard []
- 删除文件并找回:
- 比较文件差异:
- 命令帮助:
github
-
git remote add origin https://github.com/litzhen/fine_tune_image_classify.git (用origin 来代表地址的别名 )
-
git remote -v :查看添加的url的地址状态
3. git push origin master (把本地库内容推送到地址为origin分支是master上)
- 如果push 报错拒绝的话,就先pull 下来进行merge 然后在push
-
git clone [远程地址]
- 完整的把远程库下载到本地
- 创建origin远程地址别名
- 初始化本地库
-
邀请团队
- github 上的settings
- Collaborators
- 输入邀请人账号–>add collaborator
- copy invite link
- accept invitation
-
pull = fetch + merge
- git fetch origin master(此时本地的文件没有发生改变,可以通过git checkout origin/master 去查看下载下来的文件)
- git merge origin master(把远程的master的文件合并到本地文件)
- git pull [远程库地址别名:origin][远程分支名:master]
-
解决冲突
- 要点
- 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取。
- 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作即可。
- 要点
-
团队合作
- (东方不败) 先fork自己的仓库
- (东方不败) git clone [远程地址]
- (东方不败) 本地修改文件
- (东方不败)git push origin master
- (东方不败) 登录github -->pull request–> new pull request–>create pull request
- (岳不群):登录github -->pull request–>merge pull request 并添加日志信息
-
ssh-keygen -t rsa -C [email] (回车,回车。。)
-
cd .shh—> cat id_rsa.pub —> copy —github 用户信息页面 —> SSH and GPG keys —> new SSH key —> title (随便写),key(paste)
- git remote add [origin_ssh(别名)][ssh_url]
- git push origin_ssh master
GitLab
- 初始化配置gitlab: gitlab-ctl reconfigure
- 启动gitlab服务:gitlab-ctl start
- 停止gitlab服务:gitlab-ctl stop
- 通过浏览器输入地址访问,初次登录需要为gitlab的root用户设置密码
- Linux可能需要关闭防火墙(开端口):service firewalld stop
- 基本和github类似