文章目录
1 仓库创建
git init --bare test.git #创建git裸仓库
# 避免服务器装机导致的仓库被丢失,启用镜像库
git clone --mirror ssh://xxx@19.16.11.13/test.git
# 同步更新镜像库,也可以创建定时服务自动同步镜像库
# 若被删除,可以在使用git clone --mirror ssh://xxx@mirror-url/test.git 还原
git remote update
# or
git --git-dir=~/test.git remote update
# client pull
git clone xxx@19.16.11.13:/home/xxx/test.git test
附录
A.1 win10搭建git本地库
win10笔记本装Ubuntu虚拟机,有时候虚拟机突发异常,导致需重新安装虚拟机,但是这样虚拟机中的代码文档等很难找回,所以就有了,win10做git中心,Ubuntu做git client需求。
git安装
windows 版git 安装非常简单,但是git的安装路径
跟之后的git仓库路径
有关联,把git安装到F盘,其中选项全部使用默认。
Note
- 本机git安装目录:f:\Git
- 在git安装目录下创建repos目录,用于存放以后要创建的git仓库
openssh_server
打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能” 。
扫描列表,查看是否已安装 OpenSSH。 如果未安装,请在页面顶部选择“添加功能”,然后:
- 查找“OpenSSH 客户端”,再单击“安装”
- 查找“OpenSSH 服务器”,再单击“安装”
设置完成后,回到“应用”>“应用和功能”和“可选功能”,你应会看到已列出 OpenSSH 。
SSH server cfg
使用管理员模式打开PowerShell,运行如下命令,启动sshd服务
# 启动sshd
Start-Service sshd
# 配置开机运行
Set-Service -Name sshd -StartupType 'Automatic'
Note:安装 OpenSSH 服务器将创建并启用一个名为 OpenSSH-Server-In-TCP 的防火墙规则。 这允许端口 22 上的入站 SSH 流量。 如果未启用此规则且未打开此端口,那么连接将被拒绝或重置。
DefaultShell
ubuntu中git clone win10中仓库时,默认会走win10的命令行工具,这会导致很多问题,我们把默认的shell改为bash
- 打开“注册表编辑器”,ctrl+s,输入“regedit”,进入路径“计算机/HKEY_LOCAL_MACHINE/SOFTWARE/OpenSSH”,添加一个项目,类型为“字符串”,键名为“DefaultShell”,值为 bash.exe 所在的路径(例如:F:\Git\bin\bash.exe)
- 重启 SSH 服务
- Note:记得把win10当前的用户设置密码,用于Ubuntu下ssh连接使用
免密登录win10
先在本地(客户端可以是windows or linux)生成公钥
- ssh-keygen -t rsa -C xxx@163.com
在本地用户的根目录下,找到公钥文件 id_rsa.pub。
- win,C:\Users\your_userName\.ssh
- linux,~/.ssh
复制公钥文件内容,到服务端C:\Users\your_userName\.ssh下创建文件authorized_keys(没有文件后缀),粘贴公钥,保存退出。
服务端切换到C:\ProgramData\ssh\下(首次启动sshd后会生成该文件夹),打开sshd_config文件,
修改文件(以下是重点):
# 确保以下3条没有被注释
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# 确保以下2条有注释掉
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
其余不做修改,基本都是已注释不启用。
重启服务:Restart-Service sshd
A.2 linux搭建git本地库
创建本地git仓库,用于局域网内访问
git init --bare test.git #创建git裸仓库
# clone方式1
git clone xxx@19.16.11.13:/home/xxx/test.git test
cd test/;echo "hehe" > a.txt
git status .
git add .
git commit -m "aa"
git push origin master
# clone方式2
git clone ssh://xxx@19.16.11.13:/home/xxx/test.git test
cd test2/;echo "bb" >bb.txt
git status .
git add .
git commit -m "bb"
git push
免密登录linux
- windows下当前的用户目录~/.ssh下面有一个密钥id_rsa和一个公钥id_rsa.pub,其中,公钥要复制到服务器上,这样才能在你登录时,进行公私钥配对
- 使用vim编辑器打开.ssh目录下的authorized_keys(没有自行创建),将本地的id_rsa.pub内容复制进去,如有多个公钥则换行即可,并使用wq命令保存退出
A.3 git常用
# 提交
git status
git add . #注意,有个点,表示当前目录及其子目录下的所有改动
git status
git commit -m ‘info’
git push origin 分支名 #提交到指定分支
# 分支合并
git checkout master
git pull
git checkout dev
git merge master
git push origin dev
# 查看
git status #查看仓库状态
git diff . #查看X文件修改了那些内容
git diff --cache . #查看X文件修改了那些内容
git log #查看历史记录
git reflog #查看历史记录的版本号id(记录你的每一次命令,不论是否提交)
git log --pretty=oneline #如果信息量太多可以进行比较好的列表显示
git remote -v #查看仓库的拉取地址
# tag
git tag #列出所有的tag
git tag name #打轻量标签 name
git tag -d name #删除本地的tag
git push origin --delete tag name #删除远程的tag
git show name #查看tag信息
git push origin name #将tag提交到远程
# stash
git stash #把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list #查看所有被隐藏的文件列表
git stash apply #恢复被隐藏的文件,但是内容不删除
git stash drop #删除文件
git stash pop #恢复文件的同时 也删除文件
A.4 git基本流程
1 新建分支
- 首先,在你新建分支之前,你应该在master分支,并且要保证你当前的是最新代码,要不然就是找死,最后提交代码就会出问题。
- git pull origin master ,在master分支下,保证当前代码与线上同步,是最新的
- git branch <分支名> ,正儿八经的新建分支。
- git checkout <分支名> ,切换 到新建的分支上,再进行下一步。
- git push origin <分支名> ,把本地分支推到远端,让远端也有一个你的分支,用来后面提交你的代码。
- 新建分支并切换到该分支:git checkout -b <分支名>
2 提交代码
- 在新建的分支上写完代码之后,就可以提交代码了。此时应该在你新建的分支上
- git status ,查看自己写了哪些东西。
- git add .
- git commit -m ‘本次提交的描述(写自己的话,不要抄我的,哼!)’
- git push origin <分支名> ,push是从本地向远端推代码,也就是把自己写的代码提交上去,像给老师交作业一样。
- 执行完上一步,有可能报错,此时淡定,不认识英语的话在线翻译是干嘛的,大多数时候提示你,本地落后于远端,(意思就是远端比本地多了一些代码,为什么会出现这种情况呢,肯定是你跟别人共用一个分支,他提交了一段代码到远端,所以导致你的本地落后于远端)既然落后了,那就把他更新成最新的呗,
- git pull --rebase origin 远程分支名
- 执行完之后,你的代码就跟远端又一样了。并且你的修改仍然在,此时再提交你的代码
- git push origin <分支名>
3 rebase代码
-
提交完代码之后需要让测试人员进行测试,若测试没问题,就可以rebase代码,然后上线了。(这一步是保证你要上线的代码是基于最新的master)
-
git pull —rebase origin <分支名>
-
git pull —rebase origin master
-
执行这两步的时候都有可能发生冲突,此时你要做的就是解决冲突,再继续提交。解决完冲突之后,
-
git add .
-
git rebase —continue
-
若此时还有冲突,继续解决,解决完继续执行1,2步。
-
若此时没有报错,git push origin <分支名>;(这一步必须在git pull —rebase origin master成功之后执行)
-
此时若显示,当前分支落后于master分支,则需要强推,git push -f origin <分支名>,若不报错,则rebase成功。
以上就是一个完整的流程,以下是一些常用的git操作
4 删除分支
- 删除本地分支 ( 切换到master分支之后再删除 )
- git branch -d <分支名>
- 删除远端分支
- git push origin --delete <分支名>
3 查看本地有哪些分支
- git branch
- 切换分支
- git checkout <分支名>
5 如何从远程拉一个分支
- 当你跟别人共用一个分支的时候(有时候前端会共用一个分支),如果别人新建了一个分支(此时远端应该已经有了你们要用的分支),你要做的就是把远端的分支拉到自己本地。
- git fetch origin <分支名>: <分支名>
6 合并分支
- 如果你基于主分支master新建了分支dev,再基于dev分支新建了一个分支test,在test分支开发完成后,需要将test合并到dev分支上。此时,先用git branch 查看自己在哪个分支上,然后git checkout dev(切换到需要合并的分支上),最后git merge test(在dev分支上执行这句,意思是将test合并到dev分支上)
7 git强制提交本地分支覆盖远程分支
- git push origin 分支名 --force
–end