標籤:

怎樣在 GitHub 下收集 Star?


酒香還怕巷子深。

確實如此。

一個優秀的開源項目,

如果長時間得不到有效的宣傳,

它很有可能會永遠默默無聞。

如何創建一個優秀的開源項目,

這基本上與你的編程水平有關。

打鐵還需自身硬,

編程水平是優秀開源項目的前提,

不過這方面的文章/書籍實在是太多了,

本文不想討論這個話題。

那麼我就從「如何宣傳一個開源項目」的角度來說說我的看法。

第一,開源項目大多數是給程序員用的

那些給普通用戶用的開源項目的宣傳方法會有很大的不一樣,

我不太了解,所以不敢隨意講。

本文只講那些給程序員用的開源項目

既然是給程序員用的,

那麼你的宣傳手段一定要符合程序員的使用習慣。

第二,如何吸引程序員

2.1. google搜索與SEO優化。

想像一下,程序員試圖解決問題的時候一定會使用google搜索。

假設一個Python程序員想做個網站,

他可能會在google裡面搜索

Python web

如果你的開源項目在搜索結果中的位置比較靠前,

那麼一定會吸引更多的程序員。

那麼如果提高在搜索結果中的排名呢?

可以使用SEO優化。

SEO是一門很深奧的學問,

我了解的不多,就不做介紹了。

2.2. 項目介紹

一個簡潔的項目介紹可以讓程序員迅速地知道你的項目是要達到什麼目的,

擁有哪些功能,

與同類項目相比有哪些優勢。

2.3. 軟體包,軟體倉庫

如果你的開源項目能夠被ubuntu源、pypi等軟體倉庫收錄,

那麼對於你的開源項目也是大有幫助的。

ubuntu源可以使用dpkg打包,

Python有pip,Ruby有gem,nodejs有npm。

把自己的項目代碼打個包,然後提交給軟體倉庫的維護者。

2.4. 社區、論壇、郵件列表

還是用剛才的Python程序員做網站舉例,

如果你能夠在與Python web有關的社區、論壇、郵件列表裡面宣傳自己的開源項目,

那麼就會更有針對性。

2.5. 做一個產品出來

如果你的開源項目是一個Python的web框架,

那麼沒什麼比你自己用自己的框架做一個網站出來更有說服力。

而且很多開源項目,

也是先有的產品。

產品成熟以後,

產品的開發團隊決定把核心框架開源出來。

比如django,

最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的。

第三,如何留住程序員

好的,現在假設已經有好多程序員來到了你的項目主頁。

接下來就是如何留住程序員了。

留住更多的程序員,讓更多的程序員使用你的開源項目,

不但可以靠口口相傳增加項目的知名度,

而且也會有更多的人幫助你完善你的開源項目。

那麼如何留住程序員呢?

3.1. 一個簡潔的安裝配置攻略

當你發現一個開源項目的時候,

第一反應一定是在自己電腦上安裝一下試試。

如果根本沒有安裝攻略/安裝過程過於麻煩/安裝過程發生意外錯誤,

很多人可能就直接放棄了。

最短的安裝攻略通常是最好的,

比如這樣:

《how to install emacs》

sudo apt-get remove vim
sudo apt-get install emacs

抱歉,竄台了。

coffeescript的安裝攻略:

sudo npm install -g coffee-script

3.2. 一個簡潔的教程和一份完整的API文檔

3.2.1. tutorial

你需要一步一步地教那些剛剛看到你的開源項目的人如何使用你的代碼。

這就需要一個簡潔,但是可以涵蓋大部分功能的教程。

3.2.2. API reference

你需要讓那些已經用了這個項目有一段時間的人能夠迅速地找到他需要的功能,

這就需要一個包含所有功能,易於搜索/索引的API文檔。

第四,如何讓已經使用你的開源項目有一段時間的人積極地為你的項目貢獻代碼

在這裡,我想表達一個我很久以前的觀點。

這個觀點可能有點偏激,大家可以討論一下:

寫出人類能理解的代碼的難度,遠遠大於寫出計算機能理解的代碼的難度。

別人為你的項目貢獻代碼的前提肯定是他能讀懂你的代碼。

如果你的項目的源代碼一片混亂,

比如文件夾的組織毫無規則,

類名/變數名使用無法理解的縮寫或者過分奇怪的名字,

那麼別說有人想為你的項目貢獻代碼,

可能根本不會有人讀你的代碼。

還是本文開頭那句話,

打鐵還需自身硬。

開源項目吸引人的核心還是項目作者的編程水平。

優秀的代碼,

即使是一個陌生的程序員讀,也會感到賞心悅目。

好吧,又扯到編程水平上去了。

現在回到我們剛才的話題。

我們設想一下,

如果你是一個開源項目的使用者,

你在什麼情況下想要為開源項目貢獻代碼的慾望最強烈?

我個人的總結是3種: BUG,增加支持,新功能。

BUG和新功能很好理解。

增加支持,比如支持不同的平台。了解Linux的歷史的人可能會知道這樣的故事。Linux最初只支持極少數型號的CPU以及其它各種硬體。最終發展到現在支持如此多不同型號的各種硬體,可以說開源的力量給了非常大的幫助。

那麼無論是哪種情況,

開源項目的用戶其實只有兩種可能的做法,

一是把自己的發現的BUG/新想法告訴項目的作者,

二是自己寫代碼實現自己的想法/修正發現的BUG。

分別討論一下這兩種情況。

4.1. 收集用戶的反饋

其實我本來想寫bugzilla之類的工具,

不過我猛然間想起了題主把問題限定到了github,

那麼其實答案就很簡單了。

github上提供的issue功能,

就是項目的用戶與項目的作者之間交流的地方。

那麼假設有用戶給你的項目提了issue,

你該怎麼辦?

比較大的開源項目自然不用說,

由於項目的成員比較多也比較活躍,

很快就會有人回復/處理這個issue。

但是在項目初期,

就算有三五個人幫助維護你的開源項目,

主要的處理issue的工作還是要靠你自己。

如果是BUG,

你需要迅速地確認這個BUG能否重現,

然後迅速地回復issue,

說我已經確認這個BUG,稍後會修復它。

如果是新功能,

你可能會在issue裡面討論一下這個功能,

然後明確地表示我會接受/拒絕這個功能,

並且儘可能詳細地表達自己的理由。

4.2. 接受用戶提交的代碼

github上提交代碼通常是通過pull request的方式。

那麼審核代碼的尺度就是一個見仁見智的問題了。

我想說一下我的觀點,

這個觀點也可以討論。

拒絕掉爛程序員的爛代碼,可以幫助你獲得更多優秀程序員的優秀代碼。

那麼如何審核代碼呢?

4.2.1. 代碼風格

每門語言都有自己的代碼風格,

遵守既定的代碼風格對於寫和讀代碼的人都有非常多的好處。

而且有很多檢查代碼風格的工具,

比如Python的pep8和pylint。

4.2.2. 測試

人類肯定會犯錯誤,再牛X的人也會,這是無法避免的。

那麼如何儘早的發現錯誤就顯示非常重要。

現在比較好的解決辦法就是在代碼中寫單元測試。

很多語言都有非常好的單元測試的框架,

而且github上還有持續集成工具,幫助你自動執行測試。

如果你留心的話,

在一些github上的開源項目中,

可能會看見一個這樣的按鈕,圖:

這個就是一個持續集成(Continuous integration)工具,叫travis-ci。

它有很多很牛X的功能,

其中一項就是自動執行單元測試(綠色的passing就是表示測試ok)。

github上的很多開源項目都在用它。

如果提交上來的pull request的代碼中加入了新的功能,

那麼必須要求提交者加入完整的單元測試。

4.2.3. 其它問題

比如某行代碼有更好的實現方式,

或者變數命名等 工具無法檢查出的問題,

只能靠項目的作者一行一行地讀提交的代碼才能發現。

讀到某一行,覺得有問題,

可以直接在github上評論的。

github支持對某一行代碼進行評論。

4.2.4. 不要過早地拒絕pull request

除非是那種錯的特別離譜的問題,

一般的小問題,你可以在pull request時評論給他。

那麼他修正以後,可以push新的代碼上來,pull request會自動更新的。

5. 多為別人的項目貢獻代碼

你平常是否也使用一些開源項目?

是否在使用中發現了一些BUG或者想到了一些可以改進的地方?

你知道抱怨是沒有用的。

不如去找找這個項目的源代碼,

試著讀一讀,

分析一下BUG在哪裡。

不但可以看到這個世界上最優秀的一群人寫出來的代碼,

也許一不小心你就幫他們解決了這個BUG呢?

然後你就可以去給他們提交你的pull request了。

他們中有些人就可能會來follow你,

看到你主頁上的項目,

可能會順手star一下。

何樂而不為?

6. 結尾

寫的比較混亂,

錯誤也在所難免。

歡迎大家指正。


攻城師在上面有個star數很高的項目,還是很有虛榮心的:-P truebit (Sean Wang) · GitHub

酒香也有怕巷子深,如果你沒有那些「大牛」的影響力,就的學會推廣,說下我如何推廣truebit/xUnique · GitHub的:

  1. 各種社交渠道推廣:微博,博客,twitter
  2. 問答網站:Stack Overflow,知乎專欄,知乎回答,Quora (因為xUnique解決了Xcode項目文件的合併問題,所以很多SO上的相關問題我都寫了我的答案)
  3. 最後,特別推薦HackNews,這傢伙讓我一夜star超過100啊

前面兩個,如果你不是本身在那些個地方很有影響力,推廣很困難。但是第三個簡直是逆襲利器。


根據我有限的觀察,star數和你做的項目屬於哪種類型是有一定的關係

我看到很多各種下載助手那種類型的腳本獲得了大量星星,也許技術上不一定多拉風,但是非常貼近一些數目不小的人群的需要,所以獲得大量星星也是理所應當。


如果對自己的項目有自信 就去相關社區推廣一下

比如hack news reddit下的子版塊 郵件列表等


剛開始認真學編程,剛好看到一篇不錯的文章,就順便翻譯到知乎這裡了

來自Richard Kim

https://medium.com/@cwRichardKim/how-to-get-hundreds-of-stars-on-your-github-project-345b065e20a2#.domdux1kr

如何在Github上得到成百上千的收藏?

——五個熱門repo主的一點經驗

有一個矛盾之處:你花了很多時間寫了一個東西,你免費分享出去,竟然沒有人想要?這是因為存在一個死循環:

想要別人用你寫的東西?

那別人得相信你。

想讓別人相信你?

那你得有很多star證明別人用了都覺得不錯。

想要star?

你得先讓別人用你的東西。

或者

寫一些很好看或者很有用的東西

或者後面是打破死循環的關鍵,想要做到這個「或者」,可以參考一下這篇指南。

我之前是iOS程序員,六個月前才開始寫開源。我和很多大牛程序員都比不了,我也沒我的主頁看起來那麼屌。我能有看起來很屌主頁,大部分要歸功於我還會一些設計。我在六個月內有五個熱門repo,我把我成功的經驗分解為六個步驟:

  1. 項目第一
  2. 閱讀調研
  3. 建立repo
  4. 寫好README
  5. 圖片
  6. 正確處理反饋

  1. 項目第一。解決別人的問題,意識到自己很多時候是在寫重複的東西,才能知道什麼時候自己創造出了一些別人可能想要的東西。做一些side project。
  2. 閱讀調研。別人解決過的問題你就不要解決了。如果別人沒做過或者做得不行,你的機遇就來了。Github Issues可能是個靈感源泉。
  3. 建立repo。以前我寫很多優化,拖很久,力求完美,後來我發現,建立一些質量達標,可用性搞的東西性價比更高。
  4. 如果沒人看得懂你在寫什麼,也不會有人用你的東西。我建議:寫了一小時的代碼,也要寫一小時的README. 我認為這是我在Github成功的主要原因。我的README大概是這個樣子https://cdn-images-1.medium.com/max/800/1*JK3G5F-iIO7JFwxN9Dnwrw.png。幾個要點:多用圖片,尤其是動圖。不要說這個很好用,能用動圖展示的就用動圖展示。必須要有HOW TO部分,大部分人沒有耐心慢慢看。如果有人提出了問題,把回答加入README。
  5. 用心的設計你的圖片,圖片的力量遠大於文字,而且便於分享。這是我做的一張圖片,簡單的展示了效果:https://cdn-images-1.medium.com/max/800/1*qi3NQaPRoC-LidNdZS4lLA.gif GIFs可以用LICEcap捕捉然後用GIMP編輯,這兩個工具都是不要錢的。
  6. Github的熱門是這樣一個機制:上了當日熱門,再本周熱門,再本月熱門。所以你只要先爭取當日熱門即可,上了當日熱門,只要你的東西有價值,自然很容易被Github用戶收藏。為了上當月熱門,你需要:
  • 在社交網路上發個帶圖片的鏈接
  • 在一小時內得到反饋
  • 根據反饋進行修改/回復反饋
  • 重複步驟2直到滿意

你可以挑選一個你自己喜歡的社交網路,我個人喜歡reddit,那裡的用戶都比較友善。有時我也會找朋友同事,選一個你認為比較方便的方法。

總結:這不是萬能的解決方法,但是這會幫助一個好的項目脫穎而出。記住:越是複雜的項目就越需要文檔。

註:本文只翻譯了核心要點


我開發了個開源項目VeryNginx,從第一次宣傳到現在,大概一個月,已經拿到了1000+個star

這個項目是在Nginx基礎上,結合lua nginx module開發的一個強化版本,提供防火牆(waf),自定義行為和統計功能,可以在Nginx裡面按照很細緻的規則來對請求進行處理,並且自帶Web前端界面,操作上對人類很友好。

GitHub - alexazhou/VeryNginx: A very powerful and friendly nginx base on lua-nginx-module( openresty ) which provide WAF, Control Panel, and Dashboards. 功能強大且擁有對人類友好界面的Nginx,提供防火牆,自定義行為,和統計功能

怎麼辦到的呢,其實如果說最重要的,其實只有一條,那就是項目真的好,真的有用...

如果這個項目能給很多人帶來幫助,只要適當的宣傳一下,用戶會自發傳播,star就會很多我會亂說嗎

如果把主要精力放在獲取star上面,就本末倒置了


在github上開了一個erlang PaaS項目,後來考慮很久不開源就刪除了。最近搜索了一下,很驚訝被一個Erlang大牛(幾千star) 光環的人fork了。應該是Introduce寫的好吧。


我找到一個互star網站,有一種魔獸世界刷到無敵的感覺,新大陸啊,沒幾天就100顆星了。GitStar - 登錄

另外推薦我的開源項目

grain是一個極簡的、組件式的RPC框架,靈活且適合漸進學習,可與任何框架整合。同時包含系統通用多線程模型與消息通訊、多對多關係的分散式鎖、基於Servlet的HTTP框架、基於系統通用多線程模型的Websocket框架、支持行級鎖的多線程鎖等組件,按需選擇組件,不綁架開發者。

dianbaer/grain

juggle是一個極簡的、組件式的js框架。無依賴,完美閉包,靈活且適合漸進學習,可與任何框架整合。包含(支持冒泡的事件、Tween、MV框架、http、websocket、資源、模塊)等組件,按需選擇組件,不綁架開發者。

dianbaer/juggle

jupiter是一個aio web框架,基於aiohttp。支持(restful格式、掃描註解、依賴注入、jinja2模板引擎、ORM框架)等。

dianbaer/jupiter


年初寫了個基於Electron的Gist本地客戶端Lepton,現在已經快2000 stars了。

hackjutsu/Lepton

這是前些時候寫的經驗分享帖,關於從零開始打造非Markdown千星項目的經驗分享。帖子講述了這個項目如何從一開始沒人關注,到幾周內突破一千星的過程, 希望對大家有幫助:)

打造GitHub千星項目的經驗分享

順便宣傳一下自己的GitHub StackOverflow:

- GitHub: hackjutsu (Cosmo)

- StackOverflow: User hackjutsu


hackstoic/golang-open-source-projects

整理了一份golang項目的awesome清單,這個項目目前有將近800個stars。

參與開源項目,不一定需要寫代碼,可能一開始你自己有痛點, 然後想想別人有沒有同樣的問題, 解決自己問題的同時也幫別人解決了問題,而不僅僅是為了開源而開源。

比如一開始為什麼會有這個項目的原因是做項目時經常要去調研一些解決方案,甚至是一套解決方案,但是不知道要如何下手。很多時候你都不知道關鍵詞是什麼,還有就是根據一些互聯網架構組件的方式對開源項目進行匯總的比較少,一般都比較分散。我自己在調研方案的時候也遇到這個問題。 我平時又相對喜歡收集各種方案進行對比,博採眾長。 基於此,我花了兩個雙休日,認真的整理出一份清單。 希望這個清單幫助自己的同時也幫助別人。 我也一直不定期的更新這份清單。

附:下面是我開源的這個項目的readme。

github其實已經有了一個awesome-go項目了,為什麼還有必要重新整理一個。 原因是awesome-go收集了太全了, 而且大多項目都沒有詳細描述,只有一個鏈接。 因此我自己根據go語言中文社區提供的資料,還有互聯網企業架構設計中的常見組件分類, 共精心挑選了100多個開源項目(項目不限於在github開源的項目), 分成以下十幾個大類。 這個項目可以理解為互聯網IT人打造的中文版awesome-go。這個項目初衷是幫助到那些想學習和借鑒優秀golang開源項目, 和在互聯網架構設計時期望快速尋找合適輪子的人。


一個自己體驗到的高效技巧:真對你的項目的受眾群體,在對應的平台做一下推廣,效果很好!

博你一星:coolcooldee/sloth


把握住每一個推廣的機會,比如說現在:GitHub - iphone5solo/PYPhotosView: Framework with a simple method of rendering images and play video 用於圖片瀏覽和視頻播放。歡迎測BUG和提建議!


internet5/smart-array-to-tree

也給star下吧


我做了一個網站:http://HelloGitHub.com,歡迎在這裡分享自己的項目。


triffic-tang/AnotherKafkaMonitor-AKM-


打個廣告啊:docker/dockercloud-haproxydocker/dockercloud-haproxy 已經400星了

俺維護的docker haproxy項目,自動生產並更新haproxy的配置, 支持1)最早的docker link 2)dockercloud 3)docker-compose(包括swarm)4)swarm mode

求勾搭


做個2048

再不濟一點做個yet another 2048


怎麼說呢,讓很多的人能用到的項目吧。例如什麼簽到啊,什麼學習教程啊。。


GitHub - hitzzc/go-leetcode: Golang solution for leetcode 刷刷刷


GitHub - kanwangzjm/funiture: https://github.com/kanwangzjm/funiture, spring項目,許可權管理、系統監控、服務降級、定時任務動態調整、qps限制、sql監控(郵件)、驗證碼服務、短鏈接服務、動態配置等實用功能,以及redis、rabbitmq、zookeeper等技術實踐 不斷更新


GitHub - DanteAndroid/Knowledge: A MD project with MVP framework 我的方法是在技術群里宣傳自己的項目。


https://github.com/noaway/heartbeat


不斷完善repo.

panxw (pan) · GitHub


推薦閱讀:

Git 有哪些好用的圖形化客戶端?目前用的最多的是?
機器學習領域有哪些適合新手學習的 GitHub 項目?
女朋友因為我在github上給別的女生star而生氣合適嗎?
GitHub或者oschina上有哪些有趣且小巧的JAVA EE開源項目?
在github上什麼樣的開源python 項目會比較火?

TAG:GitHub |