<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          代碼版本管理筆記 | Python 程序員也應(yīng)該會(huì)的 Git 進(jìn)階操作

          共 5380字,需瀏覽 11分鐘

           ·

          2021-07-06 14:50

          點(diǎn)擊上方“咸魚學(xué)Python”,選擇“加為星標(biāo)

          第一時(shí)間關(guān)注Python技術(shù)干貨!

          配置多個(gè)遠(yuǎn)端倉庫

          # 查看當(dāng)前遠(yuǎn)程倉庫地址
          git remote -v

          地址后面有一個(gè)括號(hào)里面有 push 和 fetch 兩種,當(dāng)我們執(zhí)行 git push 時(shí)候他會(huì)調(diào)用對(duì)應(yīng) push 地址,同樣當(dāng)我們執(zhí)行命令 git featch 的時(shí)候則會(huì)調(diào)用 fetch 地址;當(dāng)拉去代碼之后默認(rèn)情況下會(huì)產(chǎn)生一個(gè)遠(yuǎn)程倉庫 origin ,并 且對(duì)應(yīng)的 push  地址也只有一個(gè)

          如果我們想把代碼往多個(gè)代碼托管平臺(tái)推送只需要添加一個(gè)遠(yuǎn)程地址即可

          git remote add [遠(yuǎn)程倉庫自定義名字] [git 倉庫地址]

          接下來將代碼推送至剛剛添加的遠(yuǎn)程倉庫上

          git push [遠(yuǎn)程倉庫自定義名字]

          我們想推送代碼至新添加的遠(yuǎn)程倉庫的話,就是用上面的命令

          但是我們想使用 git push 推送至新添加的遠(yuǎn)程倉庫的話應(yīng)該怎么操作

          使用 -u 參數(shù)來修改默認(rèn)的遠(yuǎn)程倉庫

          git push -u [[遠(yuǎn)程倉庫自定義名字]]

          如果想一條命令推送至多個(gè)倉庫怎么操作?

          git remote set-url --add origin [遠(yuǎn)程倉庫地址]

          這個(gè)時(shí)候再使用

          git remote -v
          # 這個(gè)時(shí)候 origin 就會(huì)有三個(gè)地址,兩個(gè) push 一個(gè) fetch

          本地倉庫覆蓋遠(yuǎn)程倉庫

          直接刪除代碼可以通過查看記錄看到代碼的記錄

          # 查看提交記錄
          git log
          # 找到提交敏感信息前的 hash
          git reset [hash 值]
          # git push提交代碼會(huì)報(bào)錯(cuò),因?yàn)樘峤坏陌姹咎?hào)落后與遠(yuǎn)程版本
          git push -f # 強(qiáng)制覆蓋

          單獨(dú)回滾代碼不改記錄

          使用 reset 可以回滾代碼,但是倉庫設(shè)置了保護(hù)分支就沒辦法強(qiáng)制調(diào)教

          所以這里使用 revert  可以回滾指定的版本的代碼

          需要注意的是,在使用 revert 去恢復(fù)某個(gè)版本代碼時(shí), Git  只會(huì)撤銷指定版本的代碼,而不是指定版本后的所有版本

          將工作區(qū)的代碼暫存起來

          1.  git stash 暫存當(dāng)前工作區(qū)的改動(dòng)
          # 講代碼分支切換過去,做你想要的操作
          # 操作完成后,切換會(huì)你的開發(fā)分支
          2.  git stash apply { 暫存區(qū)編號(hào) } 不填編號(hào)恢復(fù)上一次暫存的改動(dòng),填了恢復(fù)指定暫存記錄
          3.  git stash list 查看暫存區(qū)列表

          大版本迭代未完成,要發(fā)小版本,如何操作?

          我們可以先從 develop 分支切換到 test 分支中去,然后從 test 分支基礎(chǔ) 上中新建一個(gè) tmp 臨時(shí)開發(fā)分支,在 tmp 分支中開發(fā)功能。

          當(dāng)開發(fā)完成之后再切回 test 分支,使用 git rebase 命令將 tmp 分支的提交記錄復(fù)制到 test 分支中去,這樣就可以交給測(cè)試人員測(cè)試后發(fā)布新版本了。

          不過為了避免將來 develop 分支的版本開發(fā)完成后,與 test 分支合并產(chǎn)生 代碼沖突問題,我們還需要切換到 develop 分支中,同樣使用 git rebase 命令將 tmp 分支上提交的版本復(fù)制過來,這樣就保障了臨時(shí)任務(wù)可以提前單獨(dú)發(fā)布到線上去,還不會(huì)將來產(chǎn)生代碼沖突問題。

          # 切換 test 
          git checkout test
          # 新建一個(gè)小版本分支
          git checkout -b tmp_bug
          # 開發(fā)功能,修改bug后,切換回 test 分支
          git checkout test
          # 將 tmp_bug 分支中的提交記錄復(fù)制到當(dāng)前分支
          git rebase tmp_bug

          避免代碼沖突

          假設(shè)在 tmp_bug 中修改了 develop 分支的文件代碼,之后合并時(shí)會(huì)出現(xiàn)沖突,如何避免?

          # 切換 develop 分支
          git checkout develop
          # 將 tmp_bug 分支的版本復(fù)制過來
          git rebase tmp_bug

          1、新建一個(gè)臨時(shí)分支,在臨時(shí)分支中開發(fā)

          2、回到 test 分支中,將臨時(shí)分支的版本記錄復(fù)制過來,單獨(dú)發(fā)布上線

          3、回到 develop 分支中,將臨時(shí)分支的版本記錄復(fù)制過來,避免后續(xù)與 test 分支產(chǎn)生代碼沖突

          多人代碼沖突處理

          與遠(yuǎn)程代碼沖突

          # 修改沖突文件,然后使用下面的命令提交
          git commit -a 

          rebase 沖突

          # 提交沖突,刪除沖突文件,然后繼續(xù)提交
          git add . && git rebase --continue
          # 會(huì)提示我們沒有改動(dòng)
          # 這里出現(xiàn)沒有改動(dòng),是因?yàn)?nbsp;git rebase 命令先將自己的差異版本記錄拿到一邊去,然后將 develop 分支的改動(dòng)復(fù)制進(jìn)來,然后再將自己差異的版本記錄插入到末尾
          # 當(dāng)出現(xiàn)上述提示時(shí),我們可以使用 git rebase --skip 命令進(jìn)行忽略
          git rebase --skip

          暫存區(qū)沖突

          # 將代碼 git stash 之后,繼續(xù)修改了文件,并提交到了倉庫,這個(gè)時(shí)候使用 git stash apply 恢復(fù),這個(gè)時(shí)候只要修改沖突文件為需要的部分即可

          1、git merge 和 git pull 命令導(dǎo)致的沖突,處理完沖突后使用 git commit -a ;

          2、git rebase 命令導(dǎo)致的沖突,處理完沖突之后使用 git rebase --continue 或 git rebase --skip ;

          3、git stash apply 命令導(dǎo)致的沖突,處理完沖突之后使用 git add . 即可。

          歷史記錄清理

          只克隆最后一個(gè)版本記錄  - 本地倉庫

          git clone [git path] 文件夾 --depth==1

          清空版本記錄 - 遠(yuǎn)程倉庫

          # 假如遠(yuǎn)程服務(wù)器的 develop 版本很多
          # 切換 develop 分支
          git checkout develop
          # 創(chuàng)建一個(gè)特殊的新分支
          #加上一個(gè) --orphan 參數(shù),加上這個(gè)參數(shù)之后創(chuàng)建的分支有點(diǎn)特殊,他只有最后一個(gè)版本,而不是把所有的版本都復(fù)制過來,嚴(yán)格來說創(chuàng)建出來的不是分支,但很像分支
          git checkout --orphan new_branch
          # 將這個(gè)分支下的所有內(nèi)容都添加
          git add -A && git status
          # 內(nèi)容全部提交
          git commit -m "new version"
          # 然后將 develop 分支刪除
          git branch -D develop
          # 刪除后將 new_branch 分支重命名為 develop
          git branch -m develop
          # 使用 git push -f 強(qiáng)制推送至遠(yuǎn)程倉庫
          # 有些倉庫有 master  分支保護(hù),不允許強(qiáng)制 push ,需要在遠(yuǎn)程倉庫項(xiàng)目里暫時(shí)把項(xiàng)目保護(hù)關(guān)掉才能推送
          git push -f origin develop

          清理大文件

          現(xiàn)在需要找出大文件的對(duì)應(yīng) hash 值,這里我們找出前 5 個(gè)為例

          git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5

          根據(jù) hash 值找到對(duì)應(yīng)大文件名

          # git rev-list --objects --all | grep [hash 值]
          git rev-list --objects --all | grep 6ba572e5b6b9237a29bd883595e82f5a48e62a66

          我們要清除這個(gè)文件在所有歷史中的記錄,并強(qiáng)制刷新到所有分支,這里推送到遠(yuǎn)程倉庫需要有強(qiáng)制推送權(quán)限。執(zhí)行刪除 vendor.zip 文件,在所有歷史版本中的記錄

          git filter-branch --index-filter 'git rm --cached --ignore-unmatch vendor.zip'

          在上面的命令中我們刪除了文件,但是在 Git 的 repo 里面還記錄了這些文件的信息,這些信息也會(huì)占用一定的空間,我們繼續(xù)清除這些信息,并收回存儲(chǔ)空間

          rm -rf .git/refs/original/  && git reflog expire --expire=now --all

          清除多余信息之后,我們需要重新建立文件與 Git 倉庫的關(guān)聯(lián)關(guān)系

          git fsck --full --unreachable

          重新壓縮代碼,減少倉庫體積

          git repack -A -d

          通過 Git 的 GC 清理一些垃圾數(shù)據(jù)

          git gc --aggressive --prune=now

          讓遠(yuǎn)程倉庫也清理,可以強(qiáng)制推送到遠(yuǎn)程倉庫

          git push --force origin master

          搭建 gitlab 服務(wù)器

          安裝 docker,下載鏡像

          docker pull gitlab/gitlab-ce

          建立映射文件夾

          mkdir -p ~/config/gitlab/config
          mkdir -p ~/config/gitlab/logs
          mkdir -p ~/config/gitlab/data

          運(yùn)行容器

          docker run --detach --publish 8443:443 --publish 8090:80 --publish 2222:22 --name gitlab --restart always -v /Users/song/config/gitlab/config:/etc/gitlab -v
          /Users/song/config/gitlab/logs:/var/log/gitlab -v /Users/song/config/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

          對(duì)了,看完記得一鍵四連,這個(gè)對(duì)我真的很重要。

          瀏覽 33
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色99 | 伊人网站| 97爱| 无码区免费看一级毛片A片 | 国产亚洲欧美在线 |