顯示具有 [專案管理]--Git 標籤的文章。 顯示所有文章
顯示具有 [專案管理]--Git 標籤的文章。 顯示所有文章

2012年10月13日 星期六

latex也可以追踪修訂--latexdiff+git

相信愛用latex的朋友們,對latex想必是又愛又恨吧,愛的是他強大的排版功能和完善的數學方程式,而恨的則是latex沒有內建追踪修訂功能,無法和其他共同作者編寫同一份文件的時候,追踪彼此所修改的內容,甚至是在revise論文的時候,也不容易追踪自己所修的內容。

的確,latex本身沒有內建追踪修訂,不過大家也不用因此而氣餒,方法總是人想出來的,沒有原生的解決方法,還是有外掛的方式可以達成追踪修訂的目的!

沒錯,latexdiff就是為了此目的而生的script,該script使用perl語言所寫成,在灌好MacTek或是MikTex之後,就內建的一個小程式。

使用的方法很簡單,只要輸入以下指令:

latexdiff old.tex new.tex > diff.tex

其中,old.tex是舊版本的檔案,new.tex是新版本的檔案,而diff.tex則是兩個檔案的差異,也就是追踪修訂的原始檔。接著,我們只要編譯diff.tex,就能得到diff.pdf,該pdf檔就會包含新舊版本的差異啦。

如下圖:

 

螢幕快照 2012 10 13 下午8 04 43

紅色刪除線為前一版本中被刪除的內容,藍色下底線的文字則是新版本中加入的內容,一目了然,跟word的追踪修訂一樣清楚,而且就算是演算法也能呈現前後版本的不同,如下圖:

螢幕快照 2012 10 13 下午8 08 30

此外,要注意的是,文章中的圖檔和所使用到的style檔,都必須和diff.tex放在同一個資料夾中,才能正常編譯成功。因為diff.tex中,只有包含old.tex和new.tex之間文字內容的差異,圖案是不會包含進來的,除非改了圖檔的檔名。

參考文章:

http://www.peteryu.ca/tutorials/publishing/latexdiff

 

Latexdiff+Git

原則上,單單使用latexdiff就已經滿足大部份人的需求了。不過,latexdiff有一個缺點,就是他只能辨識一個檔案的差異。如果,大家跟我一樣,習慣將不同章節寫在不同的檔案中,並且使用\include,將章節引入進主要的tex檔。那文件的變動都在其他檔案中,而主文件中跟本不會有任何異動,這樣latexdiff跟本就無法檢查出新舊內容的差異。這可怎麼辦呢?總不能每個章節產生一個diff檔,然後再自行整合所有的diff檔,聽起來就是一個大工程,勞心又耗時。

沒錯,我的心聲,Google大神都聽進去了,他也知道這是一件麻煩事,所以讓我找到了Yngve's blog,這位物理博士生,遇到了和我一樣的困擾,而且他還用git來維護他的論文,所以,他自己寫了一個shell script (稱作latexbatchdiff),同時可以偵測多個檔案的變動,還可以利用git,在不同的論文版本中,追踪論文的不同點。而且,他還分享了他寫的script,無私地讓大家使用,實在是太佛心來啦。大家可以到他所建立的專案中下載 :

http://gitorious.org/latexbatchdiff/

當然也可以用git直接下載回來用:

git clone git://gitorious.org/latexbatchdiff/latexbatchdiff.git

 下載回來之後,會在latexbatchdiff資料夾下看到兩個.sh檔,其中,install.sh是安裝檔,執行install.sh之後,該script會詢問你一些問題,像是使用何種版本控制軟體,我是用git,所以,回答git,接著會問你:

Want to create new command for difftool.latex This will overwrite the existing command, is this OK? (y/n)

這裡我回答y,因為他只會覆寫git的設定,不會影響整個系統,為什麼我這麼確定呢?因為我也很擔心程式有沒有漏洞在裡面,所以兩個程式我都trace過了,不用擔心,可以安心使用。而且這個install.sh只是根據你系統的設定,將他寫的latexbatchdiff.sh複製到~/.local/bin/,所以並沒有任何問題。

執行完之後,還必須自行編輯~/.profile,加入

export PATH=/Users/hdj/.local/bin:$PATH

安裝流程如下圖:

螢幕快照 2012 10 14 上午12 30 02 2

完成以上設定之後,就大功告成啦。

可以使用以下指令執行:

latexdiff-git ebc3e0 master.tex parts/introduction.tex parts/results.tex

其中,ebc3e0是git中版本的編號,master.tex是主要的tex文件,而後面兩個則是各章節的tex檔,在latexbatchdiff中,如果要檢查每一個章節,就必須列出所有的章節檔名。如果只有一個文件的話,就不用填入後面的章節檔。此外,如果沒有填入版本編號,latexdiff-git會自行和最後一個commit的版本比較。latexdiff-git執行完之後,會自動開啟一個master-diff.pdf,這個檔案就是修訂追踪的檔案啦。

參考資料:

.gitignore http://eothred.wordpress.com/2010/11/07/latexdiff-and-git/

 

Git簡易教學

同場加映一些git的簡易教學,以免過一陣子,連自己都忘了怎麼用><

首先是在論文的資料夾中建立倉儲:

git init

接著發佈一個init版本 

git add .

git commit -a -m "Init"

 

假設我們修改了一些檔案,然後又發佈了一個新的版本,我們可以用git log看看我們各版本的資訊,如下圖:

Git

在這個例子中,假設我要追踪a3c110這個版本和目前版本的差異,我可以下:

latexdiff-git a3c110 master.tex

如果在刪除檔案時,有東西不小心誤刪了,我們可以用以下指令回到最近的版本:

git reset --hard HEAD

 

2010年7月21日 星期三

用Git管理Google code

很久以前改了一個碩博士論文的latex範本,
可是也只有分享給實驗室的學弟妹用,
前幾個星期猛然想起可以上傳到Google code,
這樣受惠的同學們會更多。

這幾天發現,Google code能用mercury和svn,但是不能直接用Git管理,
所以只能透過Git-svn來上傳和下載Google code上的原始碼。
網路上討論Git-svn的教學滿多的,不過我還是覺得Google官網提供的教學顯而易懂,如下連結:

http://google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html

以下簡述使用心得:

1. 下載原始碼
使用git-svn clone從google code的倉儲中完整下載程式回來。


$ git svn clone --username your-name -s https://your-project.googlecode.com/svn


2. 更新原始碼
如果倉儲中有新的程式,可以使用以下指令更新:


$ git svn rebase # think "svn update"


3. 上傳修改過的原始碼
在本地端修改完之後,要先用Git指令發佈成一個新的版本,
例如:


$ git add .
$ git commit -a -m "Update code"


接著透過git-svn dcommit上傳到google code的倉儲中:

$ git svn dcommit # think "svn commit"


在上傳的過程式中,會需要google code的登入密碼,必須連至下列網址,取得Google code的密碼:
https://code.google.com/hosting/settings


其它參考來源:

http://blog.chhsu.org/2010/05/git-git-svn.html

http://blog.grogmaster.com/2008/12/notes-about-git-svn-google-code.html

http://quirkygba.blogspot.com/2007/10/using-git-with-google-code-hosting.html

http://google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html

http://blog.udn.com/acbagcn/2310028

2009年12月15日 星期二

MAC OS X 上讓Git也有autocompletion的功能

之前在ubuntu上還滿常使用git的時候,
最滿意的功能就是git的自動補齊功能,
這樣就可以讓我少打好多字~~
有時忘了git的指令,只要按幾下tab,就會有提示的指令跑出來,相當方便。

但是最近使用MAC的時候,預設是沒有這項功能,讓人相當鬱悶。
最近,總算讓我找到原因啦。
原來git的source code裡有提供這個autocompletion 的script,而ubuntu預設是有將這個script加到bash裡面,
所以,ubuntu中的git才會這麼人性化的提醒使用者可能的指令。
但是MAC並沒有將這個script檔包進來,所以要自行下載和安裝。
其實也沒有很難啦,
首先將git的source code下載回來,並且複製script檔到家目錄底下

git clone git://git.kernel.org/pub/scm/git/git.git git
cp git/contrib/completion/git-completion.bash ~/.git-completion.bash


接著編輯 ~/.profile,並在文件中加入

source ~/.git-completion.bash

加完之後存檔,並重開terminal或是reload bash,
現在你的git又變得更聰明啦~~

而剛才用git clone下載回來的source code,如果有興趣的朋友可以打開來研究一下,
如果沒有需要就可以刪掉了,我們主要是想下載裡面autocompletion的script檔。

2009年8月3日 星期一

如何運用專案管理軟體維護論文

最近在研究專案管理的軟體,
深深的覺得專案管理真的有其必要性,
無論是在軟體開發或是人事配置的調動,
如果有一個好的管理流程,
都可以加快自己和大家做事的速度。
所以,今天突發奇想地想使用專案管理軟體來整理我的論文,
這樣一來,我可以追踪我自己論文的進度,也可以隨時提醒自己。
先前我已有打算使用git當作我寫論文的版本控制系統,
畢竟寫latex就跟寫程式一樣,有個版本控制系統也不為過。
那有什麼好的專案管理軟體可以和git搭在一起呢?
嘿嘿~~
答案呼之欲出啦!!!
就是Trac + git ~~~
沒錯,目前trac和git的整合性算是很高的,
不但可以利用trac中wiki做筆記,還可以用trac查看原始檔的變化。
相信有效利用這些工具可以完成很多事情。


安裝環境
作業系統: Debian
已安裝好的軟體:apache2


Step1 安裝git


sudo apt-get install git-core


Step2 安裝trac

sudo apt-get install trac libapache2-mod-python
sudo apt-get install trac-git

Step3 建立Repository
假設我在自己的家目錄底下建一個paper資料夾,並且在這個資料夾底下再開一個imitated_skew


mkdir ~/paper
cd ~/paper
mkdir imitated_skew
cd imitated_skew


首先用FTP將論文上傳到imitated_skew資料夾,
接著在這個資料夾底下開一個repository。


git init


這樣就可以在imitated_skew資料夾中看到一個.git資料夾,裡面包含了git的設定檔。
到這邊Server端已經設定好一個基本的repository。
接著就是要把Server端的repository clone回來,
為了方便操作,我在windows上的灌好了PortableGit-1.6.3.2和TortoiseGit-0.8.1.0,
所以只要在任意的資料夾上點選右鍵,就可以有Git的選項出來。如下圖所示:



這裡我是點選"Git Bash Here",因為我比較熟悉command line的操作,
接著會跑出一個提示命令字元,我們就可以下指令將Server端的資料抓回來,
底下我們輸入


git clone jay@140.xxx.xxx.xxx:/home/hdj/paper/imitated_skew imitated_skew


這裡的jay是Server上的帳號,140.xxx.xxx.xxx是Server的ip,/data/hdj/imitated_skew是Server上的repository的絕對位置,imitated_skew則是下載回來之後要取的資料夾名字。
按下Enter之後,可以透過ssh連線到Server,輸入完密碼後,資料就會下載回來了。
以上就是簡易的git設定,現在已經有一個基本的git server可以使用了。

其實只要做完以上動作git就算是設定完成了,
但是,如果要讓trac能讀取git的版本控制資料,我們必須提供一個bare的repository,
所以,我們要再新增一個資料夾,建立新的repository,
並且將剛才的資料push上去。

cd ~/paper
mkdir imitate_repo
cd imitate_repo
git --bare init
cd ../imitated_skew/
### 新增一個遠端的repository並上傳 ###
git remote add origin ../imitate_repo
git push origin master

Step4 設定trac

再來就是比較麻煩的trac設定,
首先一樣必須為trac建立一個資料夾 ~/trac/imitated_skew

mkdir ~/trac
cd ~/trac
mkdir imitated_skew
cd imitated_skew

接著起始化imitated_skew資料夾,讓他存放trac的設定檔。

trac-admin /home/hdj/trac/imitated_skew initenv

依照指示填入
1.project name: imitated_skew
2.使用的Database: (按Enter就可以用預設的trac.db)
3.使用的版本控制軟體: git
4.repository的路徑: /home/hdj/trac/imitate_repo
這樣就完成了基本的設定了,
接著修改conf/trac.ini,變動一些設定用以啟動git plugin。
新增一個[components]:

[components]
# for plugin version 0.10 (如果 trac 版本是 0.10, 下面 gitplugin 前的 # 要拿掉)
# gitplugin.* = enabled

# for plugin version 0.11.0.1+ (目前 Debian Testing 版 trac 為 0.11, 需要加這段)
tracext.git.* = enabled

並在[git]中修改git的路徑:

[git]
cached_repository = false
# git_bin must be set to git's absolute path
# or it will not work, "git" is not sufficient
git_bin = /usr/bin/git
persistent_cache = false
shortrev_len = 6

大致上trac的設定完成了,不過光是這樣還不夠,
必須設定virtual host才能透過web介面使用trac。
所以要修改/etc/apache2/site-available/default
並在之前加入


SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv "/home/hdj/trac/imitated_skew/"
PythonOption TracUriRoot "/trac/imitated_skew/"
AuthType Basic
AuthName "Paper Trac Server"
AuthUserFile /home/hdj/trac/imitated_skew/.htpasswd
Require valid-user



設定完virtual host之後,再來就是設定可以登入的使用者,
輸入以下指令就可以新增使用者:


sudo htpasswd -c /home/hdj/trac/imitated_skew/.htpasswd hdj


最後再重啟apache2,就可以連線到http://your_path/trac/imitated_skew/觀看結果。

參考來源:

http://blog.yam.com/wjyaries/article/18199573

http://wiki.ubuntu.org.cn/index.php?title=Trac%E7%9A%84%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE&variant=zh-hant
http://plog.longwin.com.tw/my_note-unix/2009/05/13/debian-linux-build-git-trac-2009
http://www.fwolf.com/blog/post/345
http://labs.kihomacapps.com/general/14/trac-gitplugin-on-ubuntu-810
http://cwlin0416.wordpress.com/2009/06/02/trac-subversion-apache-ldap-with-multiple-projects/
http://www.vixual.net/blog/archives/232
Related Posts Plugin for WordPress, Blogger...