大前端學習九:版本控制的利刃Git

目錄:

  1. git 基礎
  2. gitflow 和 團隊協做
  3. gitlub、github、gitee私有化部署方案

課程前置-版本知識

Git Vs Svn

Git基礎

祕鑰管理

  1. 在控制檯輸入ssh-keygen -t rsa -b 4096 -C "your_email@example.com
    一般來講,都會默認放在/User/mac/.ssh/id_rsa文件夾。而後繼續下一步就好了。可是,若是要放在另外的文件夾怎麼處理了?
  2. 選擇存放位置
  3. 進入github 的 settings 裏面新建一個ssh key
  4. 進入我的文件夾,打開顯示的文件夾 .ssh
  5. 修改config配置以下:
Host github.com
  HostName github.com
  User haimingyue
  PreferredAuthentications publickey
  IdentityFile /myproject/ssh/github_key
複製代碼

當我clone的時候,發現github報權限過大錯誤以下:git

  1. 修改權限:chmod -R 700 /myproject/ssh/*

到這裏就能夠clone啦。github

git remot擴展redis

git 基礎命令

  1. 新建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
複製代碼

  1. git clone : 從遠程克隆項目,這個命令包含了git init 和 git remote 和 gitpull 的功能
  2. git pull 拉去代碼
  3. git log 查看日誌
  4. git reflog 查看本地的一些操做日誌,包括刪除的日誌
  5. git config --global --list 查看全局配置
  6. 設置 git config global user.name "xxxx"
  7. git diff 查看差別
  • git log 和git reflog 的區別

git reflog 包括全部的提交、刪除、切換分支的記錄sql

  • git stash & git stash reply

應用場景: 某一個分支工做沒有完成,須要切換到另一個分支,就先git stash 緩存起來。切過去完成工做,切回這個分支,再git stash reply 恢復這些文件。docker

Git Flow(協同工做流)

經典模型

比較實用的兩個模型

  • 第一種模型
  1. 適合持續繼承的模型
  2. 上游分支向下遊發展,

master ---> pre-production ---> production緩存

主分支 ---> 預發佈版本 ---> 發佈版本bash

流程: Bug --> new branch -->master --> pre-production --> productioncomposer

  • 第二種模型
  1. 適用於版本項目

流程: master --> Stable --> new Branch --> bug fix --> versiondom

協做命令

git branch: 查看分支,當前處在哪一個分支ssh

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 --文件名 // 刪除工做區修改的文件內容



複製代碼

分支建立原則

  1. 按需建立
  2. 本身的本地能夠玩本身的分支,推送的時候,先合併代碼
  3. 合併完成以後,發起PR,讓項目經理合並代碼
  4. 重要的版本管理

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建立

github地址

  1. 在/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:
複製代碼
  1. 運行 docker-composr up -d 命令

看到下圖,就完成了。

權限控制

  1. 以組爲單元,設置管理人員
  2. 熟悉merge-request,寫好git commit(這點必定要寫好!)
  3. 及時回收權限,設置過時時間

gitignore

  1. gitignore.io
  2. vscode 中的插件 .gitignore generator
相關文章
相關標籤/搜索