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