將git工作目錄的改動應用到svn

2021-08-17 07:34:44 字數 2967 閱讀 5059

之前在維護自己寫的wordpress外掛程式時,為了能夠方便地同時向github倉庫和wordpress官方的svn倉庫提交,我只在本地維護了乙個git工作目錄,然後用git svn dcommit向svn倉庫提交,用git push向github提交。(詳見我之前寫的日誌。)

但可能是因為wordpress官方的svn倉庫太大,歷史記錄太多,而git-svn的內部實現又有點問題,所以最近幾次我用git svn rebase和git svn dcommit都毫無反應。思來想去,為了不耽誤時間,我還是決定老老實實用svn客戶端了。

於是現在我本地就有了兩個目錄:乙個git工作目錄,用於向github提交;乙個svn工作目錄,用於向svn提交。由於svn裡的分支和標籤實際上就是目錄,因此svn工作目錄下還有trunk、branches和tags子目錄。trunk子目錄裡的內容才和git工作目錄裡的內容相同。

一般我是在git工作目錄下寫**,因此思路是在git工作目錄commit之後,用git diff生成patch檔案, git log輸出提交日誌到另外乙個檔案。然後用patch命令將git diff應用到svn工作目錄。最後svn commit的時候利用git log的輸出,這樣就可以做svn trunk分支的提交和git master分支的提交一一對應。這個過程如下圖所示:

目錄結構如下所示:

顯然我在其中乙個工作目錄下做出改動後,還要將改動同步到另乙個工作目錄並提交。人工同步改動顯然繁瑣耗時又容易出錯,需要自動化。我寫了乙個指令碼git2svn.sh,用於將git工作目錄中最新提交所做的改動應用到svn工作目錄並自動提交到svn倉庫。這個指令碼就放在與git工作目錄和svn工作目錄同級的地方。可以在git工作目錄中執行,也可以在父目錄中執行:

$ pwd

/users/zhixiangzhu/emwi

$ ls -r

git svn git2svn.sh

指令碼內容如下:

# 如果當前是在父目錄,則進入git工作目錄

if [ $pwd != *git ]

then

cd git/

echo $pwdfi

# 將git工作目錄最新提交的改動輸出到git.diff

git diff --no-prefix head^ head > ../git.diff

# 將git最新提交的提交日誌輸出到git_n.log

git log -1 --format="%b" head > ../git_n.log

cd ..

# git_n.log的最後一行是空行,要將其刪掉

perl -pe 'chomp if eof' git_n.log > git.log

rm git_n.log

# 更新svn工作目錄

cd svn

svn update

# 將改動應用到svn/trunk目錄

cd trunk

patch -p0 < ../../git.diff

# 提交到svn倉庫,提交日誌與git相同

cd ..

svn commit -f ../git.log

cd ..

rm git.diff git.log

指令碼第17行的perl命令的作用是將git log -1 --format命令輸出的git_n.log檔案末尾的空行刪掉,見其中-p的作用是列印輸入檔案git_n.log的每一行, -e作用是執行-e後面的perl**。詳見這篇perl命令列引數的說明。 chomp用於去除空行。

不過這個指令碼沒有檔案的新增和刪除。對這兩個情況還需要分別呼叫svn add和svn delete,等以後遇到這個需求再改進吧。

SAP 應用到的Tcode

se38 abap編輯器 se75 建立長文物件以及呼叫建立的物件 se11 自定義表並維護 se16n 對資料表進行編輯與檢視 se80 物件瀏覽器 se91 建立訊息類 se93 建立事務碼 se37 維護function module se09 傳輸組織器 se41 選單製作器 qaer 上傳...

個體重構 將重構應用到生活中

bryan beecham在agile testing days 2015敏捷測試大會上以個體重構作主旨發言。infoq就個體重構如何幫助我們來改善我們的生活,它與 重構的關係,為什麼他認為健康飲食很重要,敏捷團隊如何從中受益以及人們可以從 找更多關於自我提公升和個體成長的資訊這幾個問題來採訪他。i...

個體重構 將重構應用到生活中

bryan beecham在agile testing days 2015敏捷測試大會上以個體重構作主旨發言。infoq就個體重構如何幫助我們來改善我們的生活,它與 重構的關係,為什麼他認為健康飲食很重要,敏捷團隊如何從中受益以及人們可以從 找更多關於自我提公升和個體成長的資訊這幾個問題來採訪他。i...