Git和GitHub Git和Goes版本控制

一、Git常用命令总结

在这里插入图片描述

1. git本地仓库创建并初始化

mkdir learngit && cd learngit			#创建一个文件夹作为版本库
git init							#将该文件初始化为git本地管理仓库
git add 文件名/ .			#将一个文件添加到暂存区
git commit -m "文件说明"	#将文件提交到仓库
git status					#查看git当前状态
git diff 文件名			#比较文件和修改了哪些内容
git branch name			#本地创建分支
git checkout name		#切换分支

2. git提交相关命令

#本地仓库与远程仓库关联
git remote add origin git@github.com:shallum1123/远程仓库名.git
#将本地仓库内容推送到远程仓库
git push -u origin master
#push失败,则进行拉取关联
#若未和远程仓库关联则使用此命令
git pull origin master --allow-unrelated-histories
#将远程仓库克隆到本地(任意目录下直接拉)
git clone git@github.com:shallum1123/远程仓库名.git
git clone -b 分支名称 git@github.com:shallum1123/远程仓库名.git
#查看文档当前版本的内容
cat readme.txt
#查看由近到远的提交版本日志
git log  ||    git log --pretty=oneline
#回退到上一个版本
git reset --hard HEAD^		
#回退到指定id版本
git reset --hard  版本id
#查看记录的每次git命令
git reflog								

3. GitHub中配置ssh key

GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是,不需要繁琐的验证过程,简化操作流程。

# 1. 设置git的username 和 email
git config --global user.name "zyl"
git config --global user.email  "shallum1123@163.com"

# 2.没有SSH Key,则需要先生成一下 :生成ssh密钥
ssh-keygen -t rsa -C "shallum1123@163.com"

# 3. id_rsa.pub内容copy到github 的ssh keys中

# 4. 验证ssh 修改
ssh -T git@github.com
# Hi shallum1123! You've successfully authenticated, but GitHub does not provide shell access.说明连接成功

查看git用户配置信息

git config user.name
git config user.email
# 使用list参数可以查看配置信息,配合local和global可以针对性的查看。
git config --list
# 对当前仓库有效
git config --list --local
# 对当前用户所有仓库有效
git config --list --global

global 配置写入/.gitconfig 文件,local 写入当前仓库下.git/config文件,local优先级高于global

4. Git Merage

# 切换到需要合并到的分支
git checkout master
#合并分支到当前分支
git merge dev
#存在冲突 强制覆盖,慎用 --force
git push origin dev --force

#git checkout remotes/anodlink/anodlink_dev
#远程仓库master分支下载到本地并存为tmp分支
git fetch origin master:tmp
# 查看不同
git diff tmp
#合并 删除分支
git merge tmp

5. Git Push 撤回

# 查看历史commits
git reflog
# 改变HEAD 指向
git reset
# 仅改变HEAD指向
git reset --soft
# 回退代码版本
git reset --hard 版本号	
git reset --hard HEAD~1
# 当前分支版本低于远程版本强制push
git push origin 分支 --force

6. idea ignore文件上传设置

# 1. 在settings - plugins下搜索.ignore插件,安装后并重启idea
# 2. 右键项目添加.ignore文件 并添加或略文件名
# 3. 清理git 缓存
git   rm  -r --cached .
# 4.将 .ignore文件提交到git远端服务

本地新建分支后,直接执行 git push -u origin 同本地分支名 会在远程新建分支。

在这里插入图片描述

7. Git-GitHub协同开发统一规范

本地操作

本地新建分支名 dev_姓名 (dev_zhaoyonglong )

git branch dev_zhaoyonglong
git checkout dev_zhaoyonglong
# 开发结束提交代码到远程命令
git add .
git commit -m "message"
git push -u origin dev_zhaoyonglong

在这里插入图片描述

在github上你的分支下会出现compare& pull request 让你合并到指定分支的请求

在这里插入图片描述

点击compare后到下面的界面,左边master分支是你需要合并到的分支,目前我们的主分支是develop20200616

注意,不要在master分支上操作,右边是你自己的分支
在这里插入图片描述

二、Git私有仓库搭建

一、yum安装git

配置环境需要有ssh

su root
yum install openssh.x86_64
ssh -v
yum install -y git
git version
#添加git用户(非必须)
cat /etc/group | grep git	#检查mysql组和用户是否存在,如无创建,
cat /etc/passwd | grep git
useradd git
passwd git
#useradd -r -g git -s /bin/false git
#删除用户
userdel -r git
#查看git用户创建成功否
cd /home && ls -al

卸载git

rpm -qa | grep git
rpm -e git
# yum 卸载
yum remove git

二、配置Git 的SSH访问

在git用户下操作

su git
cd /home/git
mkdir .ssh
cd .ssh
touch authorized_keys
# 设置权限
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys

客户端生成ssh私钥上传服务器

查看本地(代码编写系统)是否存在以下目录(C:\Users\Shallum\ .ssh)

.ssh
├── id_rsa
└── id_rsa.pub

ssh-keygen -t rsa
#一直回车默认

将.ssh 文件上传到服务器新建的.ssh目录

#将私钥文件内容追加到authorized_keys文件
cat id_rsa.pub >> authorized_keys

git服务器打开RSA认证

su root
vi /etc/ssh/sshd_config
#下面3个打开注释或添加
RSAAuthentication yes     
PubkeyAuthentication yes     
AuthorizedKeysFile  .ssh/authorized_keys #我的存在

本地客户端验证连接

ssh git@192.168.71.133
#注:如果提示需要密码,请检测公钥是否配置成功或RSA是否开启

三、服务器端创建git仓库

su git
cd /home/
#将git目录设置成为git用户所有
chown git:git git

#创建git仓库
mkdir repository.git
#将仓库设置为git用户所有
chown -R git:git repository.git
#进入仓库 初始化git仓库 --bare 创建裸仓库
git init --bare
#git仓库地址
git@192.168.1.100:/home/git/repository/Kevin_maven.git
#如果出现push不上去,在远程仓库在/.git/config 文件添加
[receive]
   denyCurrentBranch = ignore
在ecplise上连接私有git仓库
refs/heads/*   refs/remotes/origin/*
在idea上连接私有git仓库
#若从远程检出项目到本地 vcs --> Get from Version Control——>输入远程url(git@192.168.71.133:/home/git/repository/two.git) 和放置目录
git@49.233.195.230:/home/git/repository.git

1.setttings-->git-->Path:确认git的安装目录--/bin/git.exe
2.VCS -->Import into Version Control --> Creat Git Repository-->选择项目根目录作为仓库
3.在远程仓库初始化和本地仓库同名的远程仓库
4.将项目做基本的add和commit后 右键-->Git-->repository-->选择操作,输入url
例如:git@192.168.71.133:/home/git/repository/Game.git
新建分支:右下角 git -->New Branch
切换分支:
Git Bash命令上传文件到私有git仓库
#可以进行clone-- git clone 用户名@服务器IP:/相对用户根目录的git仓库绝对路径/git仓库名.git
git clone git@192.168.71.133:/home/git/repository/two.git
#git remote add origin https://github.com/shallum1123/Game.git
git remote add origin git@192.168.71.133:/home/git/repository/Game.git
git push -u origin master
#若未和远程仓库关联则使用此命令
git pull origin master --allow-unrelated-histories

四、Git版本控制以及冲突解决

Git Bash 命令操作

#查看历史提交记录
git log
git log --oneline #简介
#指定作者和查看提交记录数
git log --author=shallum1123 --oneline -5
#项目完结打签
git tag -a v0.1.0 -m "说明"
#根据版本号追加标签
git tag -a v0.2.0 85fc7e7
#根据标签查看提交记录
git tag
git log --oneline --decorate --graph#显示标签
git show v0.1.0
git show '版本号'
#创建分支
git branch dev
#切换到分支
git checkout dev
#合并到主分支

#永久删除远程仓库不需要文件
cd/到本地仓库目录文件
git pull origin master
dir  #查看有哪些文件
git rm -r --cached xiti			#删除 xiti 文件夹
git commit -m "删除了xiti文件夹" 	#提交,说明删除了xiti文件夹
git push origin master 			#将本次更改更新到github上

三、私有仓库操作

git仓库

重庆安道亿联供应链项目git仓库:

远程仓库名:origin
	frame 项目仓库地址
    user@49.233.195.230:/home/user/repository/frame.git
    主分支:master
    开发分支:anodlink_dev
    个人分支:dev_名
远程仓库名:origin
	business 项目仓库地址
    user@49.233.195.230:/home/user/repository/business.git
    主分支:master
    开发分支:anodlink_dev
    个人分支:dev_名

提交代码相关操作流程:

#关联仓库	
git remote add origin user@49.233.195.230:/home/user/repository/business.git
git remote add origin user@49.233.195.230:/home/user/repository/frame.git
git remote add adtweb user@49.233.195.230:/home/user/repository/adt_web.git
#第一次强制推送
git push anodlink anodlink_dev --force
#强制覆盖
git pull anodlink anodlink_dev --allow-unrelated-histories

问题:

warning: remote HEAD refers to nonexistent ref, unable to checkout

解决:

git branch  #输出空
git branch -a #输出 remotes/anodlink/anodlink_dev
git checkout remotes/anodlink/anodlink_dev # checkout的是git branch -a输出的内容
#接着创建分支:
git checkout -b remotes/anodlink/anodlink_dev
git branch #可以看到输出*remotes/anodlink/anodlink_dev,不再为空
git branch -m remotes/anodlink/anodlink_dev master  #重命名分支叫master
git show-ref #命令查看也能看到head了

四、git删除远程仓库

git remote #查看远程仓库
git remote rm  origin #删除仓库别名
git branch -d dev #删除本地分支
git branch -D 分支名 #强制
git push origin --delete 分支名 # 删除远程分支

五、远程覆盖本地仓库

git fetch --all && git reset --hard origin/anodlink_dev && git pull origin anodlink_dev
# 把远程仓库和本地同步,消除差异
git pull origin master --allow-unrelated-histories
#强制推送到远程
git push -f origin master
# 平台系统 代码仓库
user@49.233.195.230:/home/user/repository/v1.1/frame.git
# 业务系统 代码仓库
user@49.233.195.230:/home/user/repository/v1.1/business.git
# 前端代码仓库
user@49.233.195.230:/home/user/repository/v1.1/adt_web.git
# 开发需求-详设-规范文档仓库
user@49.233.195.230:/home/user/repository/v1.1/doc.git

四、Gogs安装

  1. 环境需要:安装git 和mysql
  2. 配置mysql -为Gogs添加一个mysql用户
--创建一个用户名为'gogs',密码为'1qaz2wsx!@'的用户。
create user 'gogs'@'%' identified by '1qaz2wsx!@';
--赋予gogs用户所有权限
grant all privileges on gogs.* to 'gogs'@'%';
flush privileges;

--变更加密方式
alter user 'gogs'@'%' identified with mysql_native_password by '1qaz2wsx!@';

下载配置权限

wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.tar.gz
wget https://dl.gogs.io/0.11.34/linux_amd64.tar.gz
# 或者官网下载
https://gogs.io/docs/installation
# 给用户分配权限
chown git:git /home/git/**
# 解压
tar -xf linux_amd64.tar.gz -C /home/git

# 配置守护进程
cp scripts/systemd/gogs.service /etc/systemd/system
sudo systemctl start gogs.service # 启动服务
# 如果需要开机启动话执行:
sudo systemctl enable gogs.service
# 查看服务运行状态
sudo systemctl status gogs.service
# 账户
adt
1qaz2wsx!@
#修改权限
sudo chmod -R 700 /home/git/gogs
sudo chown -R git:git /home/git/gogs
# 注意开启3000端口在访问
http://49.233.18.80:3000

新建git用户

useradd git
passwd git #gogs1234
# 将仓库设置为git用户
visudo
git     ALL=(ALL)       NOPASSWD: ALL
chown -R git:git repositories/

在网页访问设置后登录新建仓库后的操作

# 新建的仓库地址
git@49.233.189.80:zyc/business.git
git remote add origin git@49.233.189.80:zyc/business.git
git push -u origin master

五、Git 版本控制规范

项目v1.0版本开发完成后就行打版(管理员设置dev-1.0分支禁止提交项目,只允许下拉),项目升级基于1.0开发1.1版本时需要打基线(管理员创建1.1分支,并将1.0项目复制到1.1分支)

为规范源代码版本管理,现将各分支表述如下:

1.master分支
存放的应该是随时可供在生产环境中部署的代码
当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,都有对应的版本号标签(TAG)。
分支命名:master
该分支,由管理员负责维护,其它人只有拉取权限。来自于release分支的合并,供发版使用
生命周期:伴随着整个项目的生命周期,项目结束时结束。

2.develop分支
develop分支是每次迭代版本的共有开发分支,从最新的master分支派生(管理员操作)
当develop分支上的代码已实现了软件需求说明书中所有的功能,派生出release分支(管理员操作)
分支命名:dev-版本号
该分支,由开发人员在各自的feature分支开发完成后,合并至该分支。
生命周期:一个阶段功能开发开始到本阶段结束

3.release分支
从develop分支派生(管理员操作)
测试环境中出现的bug,统一在该分支下进行修改,并推送至远程分支。修改内容必须合并回develop分支和master分支。
分支命名惯例:release-版本号
生命周期:一个阶段功能开发结束开始,完成阶段功能测试并修复所有发现bug,合并会develop分支结束。

4.feature分支
在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支
分支命名惯例:feature-姓名全拼-分支说明-日期 / feature-分支说明-日期
例:接到一个开发关于cc视频点播替换的任务,你需要从develop分支拉出一个分支,并命名为:release-yhm-ccVideo-20200827。然后在该分支下进行开发,开发结束,将该分支合并至develop分支(此时的代码必须为可运行的,不能影响到他人),合并完成删掉该特性分支。
开发人员的每一个新功能开发都应该在该类分支下进行。
生命周期:开发一个新功能开始,完成新功能开发并合并回develop分支结束。

5.hotfixes分支
在master分支发现bug时,在master的分支上派生出一个hotfixes分支,修改完成后,合并至master分支以及develop分支,合并完成,删除该hotfixes分支。
分支命名惯例:hotfixes-姓名全拼-分支说明-日期
示例:hotfixes-yhm-cclivebug-20200827
生命周期:发现master分支bug开始,完成master分支bug结束。

综上,开发人员需要操作的分支如下:

feature分支  (开发使用)
release分支   (测试中出现的bug修改)
hotfixes分支 (master中出现的bug修改)

整个流程可以下图展示

在这里插入图片描述

### GitHub Flow Workflow for Different Team Sizes Best Practices #### Small Teams (1-5 Members) For smaller teams, simplicity and speed are key factors. The workflow should focus on rapid development cycles while maintaining quality control. In small teams, every commit goes directly into the main branch after passing automated tests[^2]. Code reviews occur quickly due to fewer contributors, ensuring continuous integration without significant delays. This approach aligns well with working in small batches of fully functioning production code which exposes less risk of regression or merge conflicts. ```bash git checkout -b feature/new-feature # Make changes... git push origin feature/new-feature # Create pull request and get approval from another member. git checkout main git pull git merge --no-ff feature/new-feature git push origin main ``` #### Medium-Sized Teams (6-20 Members) As team size increases, additional measures must be taken to manage complexity effectively. Introducing protected branches ensures only approved commits reach the main line of work. Code reviews become more structured; each change requires at least one peer review before merging back into the main branch[^3]. Automated testing pipelines play a crucial role here too, catching issues early during the build process rather than later when they might cause disruptions. ```bash git fetch upstream git checkout -b feature/another-new-feature upstream/main # Develop features locally... git push origin feature/another-new-feature # Open PR against `upstream/main`, wait for CI checks & approvals. git checkout main git rebase upstream/main git merge --no-ff feature/another-new-feature git push upstream main ``` #### Large Teams (>20 Members) Large organizations benefit most from adopting advanced practices such as trunk-based development combined with feature flags. These techniques allow multiple developers to contribute simultaneously towards common goals without stepping over each other’s toes. Feature toggles enable gradual rollouts of new functionalities controlled via configuration settings instead of branching strategies. Such methods reduce risks associated with complex merges and promote faster feedback loops between stakeholders involved in product delivery processes. ```bash # Enable Feature Flagging System export FEATURE_FLAG=true if [[ "$FEATURE_FLAG" == "true" ]]; then git checkout develop # Implement feature behind flag... else echo "Feature not enabled." fi # After implementation complete, # Submit Pull Request targeting 'main' branch following standard procedures outlined above. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值