目录:
- git 基础
- gitflow 和 团队协作
- gitlub、github、gitee私有化部署方案
课程前置-版本知识
Git Vs Svn
Git基础
秘钥管理
- 生成秘钥 官方网址
- 在控制台输入
ssh-keygen -t rsa -b 4096 -C "your_email@example.com
通常来说,都会默认放在/User/mac/.ssh/id_rsa
文件夹。然后继续下一步就行了。但是,如果要放在另外的文件夹怎么处理了? - 选择存放位置
- 进入github 的 settings 里面新建一个ssh key
- 进入个人文件夹,打开显示的文件夹
.ssh
- 修改config配置如下:
Host github.com
HostName github.com
User haimingyue
PreferredAuthentications publickey
IdentityFile /myproject/ssh/github_key
当我clone的时候,发现github报权限过大错误如下:
- 修改权限:
chmod -R 700 /myproject/ssh/*
到这里就可以clone啦。
git remot扩展
git 基础命令
- 新建git仓库的两种方式
- 第一种方式
git init
// 生成.git文件,这个文件存放所有文件的快照
git add test.txt 放入缓存
git commit -m "first-comiit" // 拍快照
git status 查看缓存
git remote add origin git@github.com:haimingyue/learngit-simoon.git
git push origin master
- 第二种方式(多仓库)
git remote add origin1 git@github.com:haimingyue/learngit-simoon1.git
git push origin origin1
- git clone : 从远程克隆项目,这个命令包含了git init 和 git remote 和 gitpull 的功能
- git pull 拉去代码
- git log 查看日志
- git reflog 查看本地的一些操作日志,包括删除的日志
- git config --global --list 查看全局配置
- 设置 git config global user.name "xxxx"
- git diff 查看差异
- git log 和git reflog 的区别
git reflog 包括所有的提交、删除、切换分支的记录
- git stash & git stash reply
应用场景: 某一个分支工作没有完成,需要切换到另外一个分支,就先git stash 缓存起来。切过去完成工作,切回这个分支,再git stash reply 恢复这些文件。
Git Flow(协同工作流)
经典模型
比较实用的两个模型
- 第一种模型
- 适合持续继承的模型
- 上游分支向下游发展,
master ---> pre-production ---> production
主分支 ---> 预发布版本 ---> 发布版本
流程: Bug --> new branch -->master --> pre-production --> production
- 第二种模型
- 适用于版本项目
流程: master --> Stable --> new Branch --> bug fix --> version
协作命令
git branch
: 查看分支,当前处在哪个分支
git branch dev
: 新增一个分支
git branch dev -D
: 删除一个分支
git checkout -d dev
: 复制代码,新建dev分支,并且切换到dev分支
git pull
= git fetch
+git merge
git fetch
: 查看远程代码与本地有什么不一样
git fetch origin feature:dev1
: 把远程feature的分支合并dev1分支, 如果dev1不存在,就自动新建一个分支。
从dev1
切换到 dev
分支之后,git merge dev1
: dev1
的代码就会合并到dev
分支
git reset --hard head^
: 回退到上一次提交
git reflog
: 查看提交记录
git reset --hard 6d89c38(哈希值)
: 回退到这个hash对应的更改
两种工作流的实操
- 场景 1 中的工作流
前提: 假设有3个分支,开发分支feature
, 预发布分支dev
, 生产环境master
git checkout dev // 切换到dev分支
get merge feature // 合并代码到dev分支
git checkout master // 切换到master
git merge master // 合并代码
- 场景2针对版本的项目控制
git tag v1.0.0
git push origin master --tag
git tag -d v1.0.0 删除
git push origin :refs/tags/v1.0.0 删除远程的v1.0.0的tag
git push origin :feature 删除远程分支
git checkout -D feature 删除本地分支
git reset HEAD 文件名 // 取消暂存
git checkout --文件名 // 删除工作区修改的文件内容
分支创建原则
- 按需创建
- 自己的本地可以玩自己的分支,推送的时候,先合并代码
- 合并完成之后,发起PR,让项目经理合并代码
- 重要的版本管理
Git Lub 搭建
使用docker run 创建
sudo docker run --detach(后台运行) \
--hostname gitlab.example.com(指定域名) \
--publish 443:443(https协议) --publish 80:80(默认访问端口) --publish 22:22(可能仓库的端口) \
--name gitlab(指定镜像名称) \
--restart always(数据隐射宿主机) \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
使用docker-gitlab创建
- 在/home 下新建 docker-composer.yml ,粘贴以下内容
version: '2'
services:
redis:
restart: always
image: sameersbn/redis:4.0.9-2
command:
- --loglevel warning
volumes:
- redis-data:/var/lib/redis:Z !这一行修改 /home/lib/redis:Z
postgresql:
restart: always
image: sameersbn/postgresql:10-2
volumes:
- postgresql-data:/var/lib/postgresql:Z !这一行修改 /home/lib/postgresql:Z
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
gitlab:
restart: always
image: sameersbn/gitlab:12.4.0
depends_on:
- redis
- postgresql
ports:
- "10080:80"
- "10022:22"
volumes:
- gitlab-data:/home/git/data:Z
environment:
- DEBUG=false
- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- REDIS_HOST=redis
- REDIS_PORT=6379
- TZ=Asia/Kolkata
- GITLAB_TIMEZONE=Kolkata
- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false
- GITLAB_HOST=localhost
- GITLAB_PORT=10080
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_ROOT_PASSWORD= !自己的密码
- GITLAB_ROOT_EMAIL= !自己的邮箱
- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
- GITLAB_NOTIFY_PUSHER=false
- GITLAB_EMAIL=notifications@example.com
- GITLAB_EMAIL_REPLY_TO=noreply@example.com
- GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com
- GITLAB_BACKUP_SCHEDULE=daily // 备份周期
- GITLAB_BACKUP_TIME=01:00
- GITLAB_BACKUP_EXPIRY=64800 // 备份7天内容
- SMTP_ENABLED=false
- SMTP_DOMAIN=www.example.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=mailer@example.com
- SMTP_PASS=password
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=login
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=mailer@example.com
- IMAP_PASS=password
- IMAP_SSL=true
- IMAP_STARTTLS=false
- OAUTH_ENABLED=false
- OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
- OAUTH_ALLOW_SSO=
- OAUTH_BLOCK_AUTO_CREATED_USERS=true
- OAUTH_AUTO_LINK_LDAP_USER=false
- OAUTH_AUTO_LINK_SAML_USER=false
- OAUTH_EXTERNAL_PROVIDERS=
- OAUTH_CAS3_LABEL=cas3
- OAUTH_CAS3_SERVER=
- OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
- OAUTH_CAS3_LOGIN_URL=/cas/login
- OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
- OAUTH_CAS3_LOGOUT_URL=/cas/logout
- OAUTH_GOOGLE_API_KEY=
- OAUTH_GOOGLE_APP_SECRET=
- OAUTH_GOOGLE_RESTRICT_DOMAIN=
- OAUTH_FACEBOOK_API_KEY=
- OAUTH_FACEBOOK_APP_SECRET=
- OAUTH_TWITTER_API_KEY=
- OAUTH_TWITTER_APP_SECRET=
- OAUTH_GITHUB_API_KEY=
- OAUTH_GITHUB_APP_SECRET=
- OAUTH_GITHUB_URL=
- OAUTH_GITHUB_VERIFY_SSL=
- OAUTH_GITLAB_API_KEY=
- OAUTH_GITLAB_APP_SECRET=
- OAUTH_BITBUCKET_API_KEY=
- OAUTH_BITBUCKET_APP_SECRET=
- OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
- OAUTH_SAML_IDP_CERT_FINGERPRINT=
- OAUTH_SAML_IDP_SSO_TARGET_URL=
- OAUTH_SAML_ISSUER=
- OAUTH_SAML_LABEL="Our SAML Provider"
- OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
- OAUTH_SAML_GROUPS_ATTRIBUTE=
- OAUTH_SAML_EXTERNAL_GROUPS=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
- OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=
- OAUTH_CROWD_SERVER_URL=
- OAUTH_CROWD_APP_NAME=
- OAUTH_CROWD_APP_PASSWORD=
- OAUTH_AUTH0_CLIENT_ID=
- OAUTH_AUTH0_CLIENT_SECRET=
- OAUTH_AUTH0_DOMAIN=
- OAUTH_AUTH0_SCOPE=
- OAUTH_AZURE_API_KEY=
- OAUTH_AZURE_API_SECRET=
- OAUTH_AZURE_TENANT_ID=
volumes:
redis-data:
postgresql-data:
gitlab-data:
- 运行
docker-composr up -d
命令
看到下图,就完成了。
权限控制
- 以组为单元,设置管理人员
- 熟悉merge-request,写好git commit(这点一定要写好!)
- 及时回收权限,设置过期时间
gitignore
- gitignore.io
- vscode 中的插件
.gitignore generator