[Git 使用] Git学习手册

2018-04-25  本文已影响0人  学识浅薄的胖

文档标识:[C-180108-M-20200106]
知识来源:廖雪峰 Git教程
内容链接均来源于互联网,如有侵权,请联系删除。

创建git 用户

git config --global user.name "Name"
git config --global user.email "email@example.com"

创建git 仓库

mkdir folder
git init

添加文件至仓库

git add files
git commit -m "it's a example"
git commit -a -m "ignore submit stage"

版本回退与文件比对

git status
git diff
git diff -cached
git diff HEAD
git log
git reset --hard HEAD^

-- HEAD 表示最新版本
-- ^ 表示上一个版本,可多次叠加
-- HEAD~10 表示最新版本往上10个版本

git reset --hard commit id

-- 可以回到指定的commit id 的版本

git reflog
git checkout --file
git reset HEAD file
git rm file
git rm -f file
git rm --cached file

远程仓库

ssh-keygen -t rsa -C "email@example.com"
git remote add origin git@github.com:****/LearnGit.git

origin 表示远程仓库的名称
git@... 表示远程仓库的地址

git push -u origin master

首次连接提示警告信息,确认指纹信息是否来自GitHub.com

The authenticity of host 'github.com (192.*.*.*)' can't be established.
RSA key fingerprint is SHA256:nThbg6*****WGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?

git push origin master
mkdir clonedemo
cd clonedemo
git clone git@github.com:****/LearnGit.git

这样在clonedemo文件夹下生成了 LearnGit 的完整项目文件

仓库分支

git branch dev
git checkout dev
git checkout -b dev
git branch

可查看当前所有分支,当前分支为带*的

git merge dev

把dev 分支合并到当前分支

git brach -d dev

删除dev 分支

当分支没有被合并时,需要强制删除

git branch -D dev
git merge --no-ff -m "merge with no-ff" dev

Bug分支

当分支工作未提交,需要暂时保存已暂存的文件,不影响其他分支的操作。

git stash

可以将已经暂存的文件隐藏起来。
当文件已修改,未暂存则无法使用stash不能隐藏。如果不使用stash,那么已修改的文件会影响其他分支的操作。

查看已保存的stash列表

git stash list

选择需要恢复的工作

git stash apply stash@{0}

多人协作

git remote

或者

git remote -v

显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

git push origin master

并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要?

  1. master分支是主分支,因此要时刻与远程同步;
  2. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  3. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

当多人协作时,对同一分支的推送产生冲突,需要先解决冲突。使用以下命令获取远程仓库的数据:

git pull

多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

分支管理

Git的标签本质是版本库的快照,与分支一样,但是分支可以进行移动,标签创建后无法移动,为了代替版本的commit号码,方便记忆。

快速创建标签

git tag name

显示所有标签,标签按字母顺序进行排序。

git tag

一般标签的创建默认是在最新的版本,当需要补创建标签则需要把版本commit号码加上,可使用git log --oneline查看,例如:

git tag v1.0 332a1d3
git show v1.0
git tag -a v1.1 -m "version 1.0" 24d123f
git tag -s v1.1 -m "version 1.0" 24d123f
git tag -d v1.0
git push origin v1.0
git push origin --tags
git push origin:refs/tags/v1.0

删除后显示如下:

To github.com:****/LearnGit.git
 - [deleted]         v1.0

注意:这里的标签一般指的就是版本,在github上的可以看到标签被放在releases一般。

自定义git

在git工作区下面创建.gitignore文件,把需要忽略的文件名填入。
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

在github上有适合各类语言环境的gitignore文件,可以下载使用:

https://github.com/github/gitignore

例如python工作环境下的配置:

# Byte-compiled / optimized / DLL files 
__pycache__/ 
*.py[cod] 
*$py.class 

# C extensions 
*.so 

# Distribution / packaging 
.Python 
build/ 
develop-eggs/ 
dist/ 
...

#符号开头的为注释,可以在文件内填入文件夹或指定后缀的文件名。

如果在忽略文件内的文件,使用git add命令添加,那么会提示文件被忽略不被提交。如果确实需要添加,则需要使用以下命令:

git add -f file

检查某类文件是否在忽略文件内,则可以使用以下命令检查:

git check-ignore -v file
git config --global alias.st status

这样使用git st就可以代替git status 使用。
当使用git config时,加了--global指的是对当前所有仓库生效,如果不加则对当前仓库生效。

cat .git/config

当前用户的Git配置放在用户主目录的隐藏文件.gitconfig文件内,windows系统下放在用户目录(“文档” 文件夹的上一级)里。

搭建git服务器

第一步,安装git:

sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

sudo adduser git

第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

sudo chown -R git:git sample.git

第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

git clone git@server:/srv/sample.git

Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
上一篇下一篇

猜你喜欢

热点阅读