中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenStack開發過程中常用Git操作場景是怎樣的

發布時間:2021-12-01 17:45:28 來源:億速云 閱讀:119 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關 OpenStack開發過程中常用Git操作場景是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

 雖然對原理也算熟,用得也算多,但一段時間不用還是容易忘,下面記下一些日常工作場景常用到的命令:


場景一:如何往社區提交一個Bug
      安裝git: sudo yum install git git-review
     下載代碼:git clone https://github.com/openstack/neutron.git


1    通過ssh-keygen命令創建密鑰, 然后在“https://review.openstack.org/#/settings/ssh-keys 界面設置public key.
2    運行“git review -s”命令設置git-review, 這步會在.git/config文件中添加一個名為gerrit的遠程分支ssh://zhhuabj@review.openstack.org:29418/openstack/neutron.git,并且可以通過ssh訪問:ssh -p 29418 review.openstack.org)
      如果報“Permission denied (publickey)”這樣的錯的話,簡單運行"ssh-add"命令將ssh key添加到ssh agent即可
3   如果想要修改一個bug時,先創建一個本地分支,
      git checkout -b task/132002
4  寫完代碼之后,也得運行一下pep8測試吧
      pep8 --count --repeat --show-source .  或者     ./run_tests.sh -p -N
5  或者也運行一下單元測試吧
      nosetests -s -v test_backend_sql.py  && nosetests -s -v test_db_plugin:TestNetworksV2.test_list_shared_networks_with_non_admin_user
      或者 python -m testtools.run neutron.tests.unit.test_security_groups_rpc
      或者 python setup.py testr --slowest --testr-args='--subunit  neutron.tests.unit.test_security_groups_rpc' |  subunit2pyunit
      或者 ./run_test.sh -N testtools.run neutron.tests.unit.test_security_groups_rpc
6  提交代碼到本地庫
      git add -u (修改的文件), 若創建了新文件 git add -i
      git commit
      提交信息的格式一般如下,一般分三段,第一段是標準說清楚你要做什么,如果你在改hyper-v模塊最好有hyper-v的字眼,這樣大家在收到郵件時只看標題就知道你在做什么了,這很重要;第二段簡短描述;第三段一般使用“Fixed bug #161317",#號很重要,這樣會自動在gerrit上鏈接到bug上。
      Add documentation for upgrading hyperv OpenStack compute node

      This guide covers how to upgrade and configure hyperv OpenStack
      compute node from Grizzly to Havana

      Fixed bug #161317
      如果是延用上次提交的信息使用命令:git commit --amend 
7  本來在git review通過后gerrit會自動rebase到master分支的,但是有沖突的話沒人幫你改,所以自己在git review前最好在本地做一個rebase操作,有沖突及時改:
      git rebase master  有沖突再解決沖突之后繼續執行:git rebase --continue
8  提交代碼評審
      git review 或者 git review master

      這時會在gerrit服務器上創建一個本地分支:refs/for/master/task/132002, 如果上面改bug時不建分支的話,這里就變成了: refs/for/master,下一個人提交直接就被沖掉了

9 如果社區上的jenkins出錯,確定不是你自己的代碼造成的,可以回復“recheck no bug” 觸發重新檢查,或者"recheck bug ###"

10 說說依賴提交,例如如果一個patch在社區已經被很多人+1了,但這時候有人希望提交一個相關的其他patch, 你當然不想破壞這么多已經+1的成果,所以你會希望再提一個patch但它會依賴前一個patch。注意兩點:生成一個新的gerrit評審頁是由Change-Id決定的;而是否在一個評審頁上產生一個新的change set去破壞+1是由commit id決定的。所以只要保證前一個patch的commit id不變就行了,然后在這個基礎上再提交一個patch再git review即可。當然,在git review之前最好先git rebase一下,不然如果本地git rebase的話就會產生一個新的commit id這樣同樣會產生一個新的change set,不過gerrit還比較智能,那些+1會自動添加上(Automatically re-added by Gerrit trivial rebase detection script.), 一個例子見:https://review.openstack.org/#/c/51375/


場景二:如何rebase代碼
git rebase用于在一個分支中合并另一分支,舉個例子,一家公司想要用OpenStack做二次開發的話,
在公司內部的git庫里創建了三個分支:my-master, my-grizzly, my-havana
OpenStack的git庫里的分支叫:    github-master, github-grizzly, github-havana
現在大家把內部代碼都提交在my-havana分支,那么也需要時不時將社區的github-havana的代碼rebase合并到my-havana分支中
1,首先在.git/config里要有兩個remote分支,一個指向內部的版本庫,一個指向github的版本庫,如.git/config的相應配置如下:
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "my-origin"]
        fetch = +refs/heads/*:refs/remotes/my-origin/*
        url = git://<your_ip>/neutron.git
[remote "github-origin"]
        fetch = +refs/heads/*:refs/remotes/github-origin/*
        url = https://github.com/openstack/neutron.git
[branch "master"]
        remote = my-origin
        merge = refs/heads/master
[branch "my-havana"]
        remote = my-origin
        merge = refs/heads/my-havana
[branch "my-grizzly"]
        remote = my-origin
        merge = refs/heads/my-grizzly
2, 更新上面所有的remote分支 git remote update
3, 因為是要將社區的havana分支的代碼同步到自己havana分支,所以為兩個遠程分支創建對應的本地分支
   git checkout -b github-havana github/stable/havana
   git checkout -b my-havana origin/my-havana
4, 合并,成功后應該用git log -1能看到一個新的合并提交。如果有沖突的話就解決沖突再git merge next
   git checkout my-havana
   git merget github-havana
5, 運行單元測試
  tox --recreate -e py27,pep8 
  ./run_tests.sh -V -f
6, 用-n參數(dry-run)測試提交, 提交到名為my-origin的遠程分支的my-havana分支中: 
   git push -n my-origin HEAD:refs/heads/my-havana
   若沒有問題的話真正提交:     
   git push  my-origin HEAD:refs/heads/my-havana


場景三:cherry pick代碼

例如,一個社區bug 1161195被提交到master分支, 社區沒有批準進stable-havana分支,或者來不及等它進,這時候公司內部要求進my-havana分支的話,可以將這個bug通過cherry pick合并過來。
1, 為這個任務創建一個bug.
   git checkout stable-havana
   git pull
   git checkout -b bug/1161195
2, 在社區找到bug 1161195的代碼提交id, 如:5f3fa391ed499750ad68ad5b000b4e2e0a86978e
   可以通過 git log |grep -B 30 <commit-id>查看確認
3, 在bug/1161195分支上執行cherry pick命令:
   git cherry-pick -x  <commit-id>
4, 提交代碼評審
   git commit or git commit --amend
   git review stable-havana


場景四:將git產生的patch變成和svn兼容

#!/bin/sh
#
# git-svn-diff
# Generate an SVN-compatible diff against the tip of the tracking branch
REV=`git svn find-rev $(git rev-list --date-order --max-count=1 master)`
git diff --no-prefix $(git rev-list --date-order --max-count=1 master) $* |sed -e "s/^+++ .*/& (working copy)/" \
-e "s/^--- .*/& (revision $REV)/" \
-e "s/^diff --git [^[:space:]]*/Index:/" -e "s/^index.*/===================================================================/"


在本機上創建一個共享的git庫

sudo groupadd git
sudo useradd -d /home/git -m -g git git
sudo passwd git
su - git
mkdir /home/git/patent.git
cd patent.git/
git init --bare --shared

# test in another directory
cd /bak/tmp
git clone git@9.123.136.122:/home/git/patent.git
cd patent
cp test.doc .
git add test.doc
git commit -m "init commit"
git push origin master

這時候肯定是希望大家通過git用戶可以訪問git庫,但又不希望他們通過ssh登錄這臺機器,所以修改/etc/passwd文件,

將     “  git:x:502:503::/home/git:/bin/bash ”

改成:git:x:502:503::/home/git:/usr/bin/git-shell

這時候還需要將每個客戶端的公鑰加到/home/git/.ssh/authorized_keys文件里,公鑰可以通過ssh-keygen -t rsa生成


場景五,使用git命令操作bzr與hg

sudo apt-get install mercurial python-hglib
wget https://raw.githubusercontent.com/felipec/git-remote-hg/master/git-remote-hg
wget https://raw.githubusercontent.com/felipec/git-remote-bzr/master/git-remote-bzr
sudo chmod 755 ./git-remote-*
sudo mv git-remote-* /usr/bin

examples:
git clone "bzr::lp:ubuntu/ifupdown"
git clone "bzr::lp:debian/ifupdown"
git clone "hg::http://anonscm.debian.org/hg/collab-maint/ifupdown/"


場景六,依賴提交

有一種情況,我向社區同時提交了兩個有依賴的提交,在本地提交這兩個提交之后直接git review即可。
現在前一個提交(假設提交id為:187f)要修改,怎么辦呢?
a, git rebase 187f^ --interactive, 回到要修改的提交的前一個點上
b, 修改那個提交,最后git commit --amend
c, git rebase --continue, 繼續變基并且返回到原來的HEAD處
如果中間出現“interactive rebase already started”, 用“git rebase -i --abort”命令重來。


其它命令:

git reset HEAD~1                      撤銷最后一次提交。
git reset --hard HEAD^             撤銷最后一次提交并清除本地修改

git reset --hard Merge_Head  和服務器保持一致

git clean -dfx                               刪除本地未在版本庫的東西

git stash  & git stash list & git stash pop  暫存代碼

git rebase -i --abort                   

以上就是 OpenStack開發過程中常用Git操作場景是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐都县| 吴川市| 易门县| 秦皇岛市| 顺义区| 东丽区| 鹤峰县| 长岭县| 大城县| 伊宁县| 滕州市| 临猗县| 修水县| 中方县| 和静县| 灌云县| 台江县| 布尔津县| 嫩江县| 咸丰县| 三台县| 陇西县| 伊吾县| 开鲁县| 盐山县| 大宁县| 沧州市| 三都| 鄂温| 南木林县| 五峰| 花莲县| 保康县| 达拉特旗| 田林县| 嘉祥县| 阿拉善盟| 开远市| 昌邑市| 阜新市| 星子县|