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