GitHub, Google Code, and other
http://antkillerfarm.github.io/
GitHub
2014.12
自從最近google code日益難以訪問以來,我就一直在思考著替代的方案。然后在大徐的blog的指引之下,找到了github。
應(yīng)該說使用git和svn相比,在現(xiàn)在的網(wǎng)絡(luò)條件下,還是有不少優(yōu)勢(shì)的。我托管代碼的目的,只是給自己的blog提供一個(gè)代碼鏈接的地方而已,基本無意使用這個(gè)和他人協(xié)作。由于git的版本庫是在本地的,即使github由于某種原因倒掉了,我也可以很方便的換一個(gè)替代品。
GitHub導(dǎo)入其他版本庫的代碼
由于Google Code日益難以訪問,因此我靈機(jī)一動(dòng),何不使用GitHub的導(dǎo)入功能,從Google Code中導(dǎo)出代碼,然后再訪問之?
以box2d為例,它的svn地址是:
https://box2d.googlecode.com/svn/
GitHub導(dǎo)入版本庫功能的地址是:
https://import.github.com/new
GitHub使用技巧
https://github.com/trending/python?since=monthly
這個(gè)可以看到python的月度趨勢(shì),便于分析技術(shù)熱點(diǎn)。其他語言可以此類推。
搭建本地GitHub Blog服務(wù)
1.安裝ruby
2.修改gem的源
作為生活在水深火熱的墻內(nèi)人民,有必要進(jìn)行下面一步修改gem的源,方便我們更快的下載所需的組件:
sudo gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
3.安裝ruby-dev
在ubuntu上可以這樣:
sudo apt-get install ruby-dev
在windows下需要下載一個(gè)Dev-kit的安裝包。但是Ruby的網(wǎng)站經(jīng)常訪問不了,所以其實(shí)還可以這樣安裝:
gem install devkit
4.安裝jekyll和rdiscount
gem install jekyll rdiscount
5.進(jìn)入blog的根目錄之后,運(yùn)行
jekyll serve
Markdown
自從我在github建立blog以來,一直都在使用markdown語言。這里僅針對(duì)我使用過程中遇到的問題做一個(gè)筆記。
markdown渲染器
Jekyll原生支持maruku,rdiscount,kramdown,redcarpet等markdown渲染器。其中的maruku由于已經(jīng)不維護(hù),在Jekyll 3.0以后被拋棄。
其實(shí)使用哪個(gè)markdown渲染器對(duì)外觀的影響都不大,外觀更多的是css的事情,因此夠用就好。
開始用的是大徐模板里的rdiscount,最近發(fā)現(xiàn)該渲染器不支持代碼中的空行。
接著換成kramdown,但是又不支持HTML表格里的rowspan。
然后換成redcarpet,而redcarpet會(huì)對(duì)下劃線進(jìn)行改寫,需要加上no_intra_emphasis擴(kuò)展以關(guān)閉之。修改提交之后,github又告訴我,馬上要停用redcarpet,統(tǒng)一使用kramdown。
于是又換回kramdown,反復(fù)折騰之后,才發(fā)現(xiàn)kramdown可以支持rowspan,但是它的語法要求非常嚴(yán)格,必須符合XHTML才行。
錯(cuò)誤寫法:<td rowspan=2>
正確寫法:<td rowspan="2">
語法高亮
之前一直使用pygments作為語法高亮的著色器。近來,github推薦我使用rouge。經(jīng)過一番研究才發(fā)現(xiàn),pygments是用python寫的,難怪windows環(huán)境下的Jekyll老是無法集成pygments。
顯示數(shù)學(xué)公式
這里主要用到了LaTeX和MathJax。
LaTeX是TeX的擴(kuò)展包,用于書寫數(shù)學(xué)公式。它的官網(wǎng)是:
http://www.latex-project.org/
MathJax是一個(gè)JavaScript包,可以將LaTeX書寫的數(shù)學(xué)公式轉(zhuǎn)換成HTML。它的官網(wǎng)是:
https://www.mathjax.org/
源代碼地址:
https://github.com/mathjax/MathJax
如果官網(wǎng)的網(wǎng)速不好的話,還可采用以下CDN地址:
http://cdn.bootcss.com/mathjax/2.4.0/MathJax.js
一般而言,從一個(gè)巨大的符號(hào)表中查詢所需要的特定符號(hào)是一件令人沮喪的事情。在此向大家介紹一個(gè)LATEX手寫符號(hào)識(shí)別系統(tǒng):
http://detexify.kirelabs.org/classify.html
LaTeX和MathJax聯(lián)合使用的方法參見:
http://iori.sinaapp.com/17.html/comment-page-1
http://mlworks.cn/posts/introduction-to-mathjax-and-latex-expression/
示例如下:
p??(t)=o??+td??
\[
(x-o_x)^2+(x-o_y)^2+(x-o_z)^2-R^2=0
\]
git常用命令
1.創(chuàng)建版本庫
git init
2.撤銷add
git rm --cached FILE
3.暫存本地修改及恢復(fù)
如果git pull的時(shí)候,本地有修改,就需要暫存,并在git pull之后,恢復(fù)之。
git stash
git stash pop
4.查看遠(yuǎn)程倉庫的地址
有的時(shí)候時(shí)間一長(zhǎng),就會(huì)搞忘當(dāng)初下載代碼時(shí)的遠(yuǎn)程倉庫的地址。這時(shí)可以使用git remote -v查看之。
5.check out有submodule的版本庫
git clone --recursive URL
6.checkout和reset的區(qū)別
在恢復(fù)歷史版本的時(shí)候,checkout只是檢出歷史版本,而不會(huì)刪除歷史版本之后的版本記錄,但reset就不同了,reset相當(dāng)于版本庫回退到歷史版本,因此后續(xù)的版本記錄都沒有了。
7.制作和應(yīng)用patch
制作patch主要有兩種方式:git diff和git format-patch。前者生成通用patch,而后者生成git專用patch。使用示例:
git diff SHA1 SHA2 比較兩個(gè)歷史版本之間的差異,SHA1和SHA2是兩次commit的SHA值。
應(yīng)用patch:git am
如何git超大版本庫
自從兩次git完整的linux kernel,都因?yàn)榫W(wǎng)絡(luò)問題,而中途失敗之后,不甘心的我,繼續(xù)在網(wǎng)上尋找答案。
目前已知的答案是git不支持?jǐn)帱c(diǎn)續(xù)傳,也不支持object原子下載。網(wǎng)上所謂的git fetch能斷點(diǎn)續(xù)傳一說,純屬誤會(huì)。那只不過是重新下載的命令,即使成功,那也是由于第二次的網(wǎng)絡(luò)環(huán)境變好導(dǎo)致的。
其他的辦法包括git bundle,但是這個(gè)需要服務(wù)器支持才行,而多數(shù)站點(diǎn)都沒有這個(gè)功能。Android代碼的網(wǎng)站就采用了這種方法。
其實(shí)對(duì)付超大版本庫,git已經(jīng)提供了相應(yīng)的辦法:
git pull --depth N
N表示深度,具體的含義我也不太清楚。基本上,N=1就是只下載當(dāng)前的版本,N>1的話,還會(huì)下載以前的歷史版本。這樣我們可以通過不斷增加N的方式,將完整的版本庫下載到本地。
N增加到多大,才能把整個(gè)版本庫下載完呢?
使用命令行的話,如果增加N,沒有繼續(xù)下載,就說明版本庫已經(jīng)完全下載到本地了。
如果使用TortoiseGit的話,下載完全之后,再git pull的話,就沒有depth選項(xiàng)了。
參考文章:
http://blogs.atlassian.com/2014/05/handle-big-repositories-git/
git查看遠(yuǎn)端倉庫地址
git remote -v
Google Code
2013.12
一直以來,在sohu寫blog都面臨一個(gè)很大的問題。代碼全貼上的話,太占篇幅,而以附件形式提供代碼,又不為blog系統(tǒng)所支持。
之前的解決辦法是使用網(wǎng)盤,但是網(wǎng)盤時(shí)間一長(zhǎng)之后,就不再可用,而我顯然也不可能經(jīng)常去刷新網(wǎng)盤,使得其隨時(shí)可用。再者,網(wǎng)盤也不是專業(yè)的代碼托管方式。
好在現(xiàn)在有了google code。
Google code的倒掉
2015.3
昨天收到了Google Code即將關(guān)閉的郵件,很是震驚。不過想想也在情理之中,用過GitHub之后,對(duì)Google Code也就不那么有愛了。就像用了svn,對(duì)cvs無愛;用了git,對(duì)svn無愛一樣。不過對(duì)svn的無愛,只是部分的。如果是公司性質(zhì)的小團(tuán)隊(duì)開發(fā)的話,仍然推薦svn,因?yàn)闄?quán)限管理比較方便,概念也比git簡(jiǎn)單。而如果是不方便上網(wǎng)的環(huán)境的話,git的優(yōu)勢(shì)就比較明顯了。
Other
SVN
一直以來都是在Windows下使用TortoiseSVN客戶端來操作svn?,F(xiàn)在到了linux環(huán)境下,由于找了一圈貌似也沒有什么很給力的GUI客戶端。所以只有對(duì)svn的命令行使用做一些研究了。
好在之前一直使用英文版的TortoiseSVN,因此在使用svn help后,基本操作方面倒是沒有遇到什么大的問題。只有commit的時(shí)候,除了commit之外,還要update一下,然后當(dāng)前目錄的svn狀態(tài)才會(huì)切換到提交了新版本之后的狀態(tài)。
Google Reader倒掉之后
2014.1
好久沒上Google Reader了,這幾天有空想上去,才發(fā)現(xiàn)Google Reader已經(jīng)在去年的7月被關(guān)閉了。記得當(dāng)初自己還曾基于Google Reader的API,做了一個(gè)Android上的RSS閱讀器,當(dāng)然完成度只有40%左右。沒想到Google Reader這么一關(guān),這個(gè)作品也就徹底廢品了。。。
之前使用Google Reader,主要的目的是瀏覽cnbeta。但cnbeta的rss是摘要型的,必須隨時(shí)在線才可查閱正文。而我的碎片時(shí)間主要是上下班趕車的路上,這個(gè)場(chǎng)景是沒有上網(wǎng)條件的。幸好,現(xiàn)在有人做了一個(gè)全文的rss:http://cnbeta.catke.com/
但是無論是這個(gè)全文rss,還是cnbeta本身的rss,都有條目數(shù)量的限制。超過這個(gè)數(shù)量的老條目,也就無法獲得了。怎么樣才能像Google Reader那樣,無遺漏的保存一段時(shí)間以來的所有條目呢?倘若是以前的話,你必須擁有一臺(tái)時(shí)刻在線的PC,不間斷的刷新rss。
而現(xiàn)在的話,你可以有別的選擇,比如ifttt.com。ifttt是If this then that的縮寫。國內(nèi)的山寨版本有“如果云”。這些網(wǎng)站允許你自己創(chuàng)建一定的規(guī)則,來完成一定的動(dòng)作。具體到當(dāng)前的目標(biāo),就是創(chuàng)建以下規(guī)則:一旦rss的內(nèi)容有更新,就立即將新內(nèi)容以電子郵件的方式發(fā)送到我的郵箱里。
剩下的問題就簡(jiǎn)單了,找一個(gè)好用的郵箱。使用郵箱的手機(jī)客戶端,將郵件下載到手機(jī)上,這樣每天的早報(bào)就有了:)
版本管理工具的前世今生
參考Wiki的相關(guān)詞條,可將版本工具分為三代:
1.本地版本管理
開源:SCCS (1972) RCS (1982)
私有:PVCS (1985) QVCS (1991)
以RCS最為著名,不過由于年代久遠(yuǎn),我從來沒用過。
2.客戶端/服務(wù)器版本管理
開源:CVS (1986, 1990 in C) CVSNT (1998) QVCS Enterprise (1998) Subversion (2000)
私有:Software Change Manager (1970s) Panvalet (1970s) Endevor (1980s) DSEE (1984) Synergy (1990) ClearCase (1992) CMVC (1994) Visual SourceSafe (1994) Perforce (1995) StarTeam (1995) Integrity (2001) Surround SCM (2002) AccuRev SCM (2002) SourceAnywhere (2003) Vault (2003) Team Foundation Server (2005) Team Concert (2008)
我用過的包括CVS、SVN、ClearCase和Visual SourceSafe。
這一代的工具,以CVS為開端。ClearCase和Visual SourceSafe與CVS差不多同時(shí)期,因此功能上也多有相同,總的來說就是ClearCase功能強(qiáng),但不好用。SourceSafe好用,但功能差。
其中,ClearCase我在之前的公司有用過,當(dāng)時(shí)為了簡(jiǎn)單的check in和check out,竟然還需要編寫腳本以簡(jiǎn)化流程。不過功能的確是沒的說,分支合并權(quán)限都不在話下。
VSS以現(xiàn)在的角度來看,基本就是個(gè)垃圾了,它是MS收購的一家公司的產(chǎn)品,目的是填補(bǔ)VS在這方面的空白。但這樣弱的工具,即使MS內(nèi)部的人也基本不用,這也是后來MS發(fā)布Team Foundation Server的重要原因。
SVN是這一代的集大成者,使用簡(jiǎn)單的同時(shí),仍保有相當(dāng)強(qiáng)度的功能,唯一詬病的就是合并功能太弱。
3.分布式版本管理
開源:GNU arch (2001) Darcs (2002) DCVS (2002) ArX (2003) Monotone (2003) SVK (2003) Codeville (2005) Bazaar (2005) Git (2005) Mercurial (2005) Fossil (2007) Veracity (2010)
私有:TeamWare (1990s?) Code Co-op (1997) BitKeeper (1998) Plastic SCM (2006)
早期比較有名的是BitKeeper。它在2002~2005年是Linux Kernel所使用的版本工具。Linus曾經(jīng)非常喜歡它。可惜后來由于商業(yè)利益的關(guān)系,開發(fā)者的要挾惹毛了Linus。大神發(fā)威開發(fā)了Git,從此BitKeeper也就無人問津了。
從這件事情可以看出,Linus其實(shí)并不是一個(gè)像Richard Stallman那樣的開源潔癖狂,現(xiàn)有的東西夠用,他就懶得節(jié)外生枝了。但也不要因此小看他的水平,大神發(fā)起威來,搞死像BitKeeper這樣的工具還是綽綽有余的。
目前較為主流的Bazaar、Git和Mercurial都出現(xiàn)在2005年,這并不是偶然的。實(shí)際上都是BitKeeper和開源社區(qū)之間戰(zhàn)爭(zhēng)的產(chǎn)物。
后Git時(shí)代的工具,如Fossil和Veracity,相比Git來說,對(duì)權(quán)限、BUG跟蹤之類的功能做了進(jìn)一步的擴(kuò)展。
總結(jié)
以上是生活随笔為你收集整理的GitHub, Google Code, and other的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CC2530, 各种智能家居通信技术比较
- 下一篇: 入行以来涉及的技术简史