iT邦幫忙

DAY 4
1

emacs的30天學習筆記系列 第 4

emacs 做中學第四天

  • 分享至 

  • xImage
  •  

寫程式,或是任何事,總離不開備分。備分是皎兔三窟,就是最好備三分以上,以免兩份掛了,
仍是沒法還原。意思就是凡事總有留退路,給自己退路,給別人退路,別走極端。

備分的檔案,有兩種,一種是檔案是會一改再改,一改二十多年,沒有中斷過,像tiptop裏的code,有些是兩千年前的code,反正4GL的程式就是一直很跑,跑在unix/linux server上,
所以這種作業方式,就產生了版本控制這套學問了。
另一種就是產生一次,不太可能再用第二次了。

版本控制,幾乎是linux ,自由軟體運動能夠成功的一個很重要的關鍵。算是infra-structure,基礎建設,目前linux核心版本是2.6.XX版,你可以往前找0.1, 0.2, 或是任何
時期的版本。這次有邦友分享PMP專案管理,有時候,發現,像linux核心這種
百萬行等級,開發者遍布全球,跨越24個時區,大多數只能用英文email構通的活躍專案,
又是非營利的組織,如何有紀律?如何定下roadmap,帶領大家前進,除了修不完的bug之外,還能做一些新的功能??

今年COSCUP 適逢linux核心20週年,Jonathan Corbet來透露了一些開發團隊裏的八卦,
其中,有一個重要版本的釋出,本來是下個月要釋出,結果推遲了兩年才推出。所以
以專案管理的角度,它早就失敗了,或是從dead line來衡量一個案子,是否準時完成,並不是唯一的一個尺度。

另外一件事,和版本管理有關,就是精神領袖Linus,因為不用中央集中的版本控制系統,而自由軟體裏又沒有合適的分散式版本控制系統,有一段時間和基本教義派的大老之間關係很緊張。有時候,歷史也很諷刺,做為自由軟體的核心,有一段不短的時間是用私有的不開放源始碼,且不允許讓人加功能的版權軟體在版本控制。

最後,Linus自己寫了一套分散式的版本管理系統Git,來取代這個私有軟體。

Linus 說,Git即使不是最佳最終的完美解決方案,至少是目前可選的分案中,最好的。
這算是一種謙虛嗎?聽起來,怪怪的。

上圖是一張之後會用到的圖,表示emacs可以輔助程式碼的產生。

今天先提環境的設定:
這次示範的git遠端源碼倉是用github。這在ROR(ruby on rails)界裏,是很風行的源碼倉,
所以它的語言統計裏,ruby僅次於java script排名第二位的使用率。

自由軟體且開放源碼的專案,是免錢的,給你300mb(0.3 G)的空間。
所以申請帳號,快速加入github吧。

我沒有收github的廣告費,當然你也可以用別家的git 源碼倉庫,你可以用kernel的源碼倉,把
linus轄下的源碼倉 分枝(fork)一分到你的目錄下也可以,恐怕300mb不夠用。

在安裝時,我手殘誤按了passphrase的選項,所以
之後,都要多輸入第二道密碼,安全加倍,麻煩加倍。

timloo@ubuntu:~$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is xx:xx:xx:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Enter passphrase for key '/home/timloo/.ssh/id_rsa':
Hi timloo0710! You've successfully authenticated, but GitHub does not provide shell access.

按照按例一路做下來,我的git push 指令,竟然不支援**-u的選項,真有功虧一匱的感覺。然後試了一下 -v, 沒搞頭,再試一下 -f, 可以把檔案傳上github。
之後得空再了解一下
-u 和 -f**的不同。或是升級一下git.

timloo@ubuntu:~/Iron_man_30_days$ git push -u origin master
error: unknown switch `u'
usage: git push [--all | --mirror] [--dry-run] [--tags] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [-v] [<repository> <refspec>...]

-v, --verbose be verbose
--repo <repository> repository
--all push all refs
--mirror mirror all refs
--tags push tags
--dry-run dry run
-f, --force force updates
--thin use thin pack
--receive-pack <receive-pack>
receive pack program
--exec <receive-pack>
receive pack program

timloo@ubuntu:~/Iron_man_30_days$ git push -f origin master
Enter passphrase for key '/home/timloo/.ssh/id_rsa':
Counting objects: 3, done.
Writing objects: 100% (3/3), 202 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:timloo0710/Iron_man_30_days.git
* [new branch] master -> master

按造教學,你可以在本機new一個 README, 然後上傳到遠端github下自己帳號的專案下。

然後可以加新檔案,如hi.c ,或是 one.c , 這時的指令。

git add hi.c
git add one.c

這是指加入 git 管控。

這時仍可修修改改,到你覺得滿意。

就提交。

這時下:

git commit -m 'fix hi.c'

像這樣,如何一次修改多個檔,也可以

git commit -a -m 'fix hi.c one.c'

這時,是請git,把檔案加上 版本號。未來可回溯。

這是在本機的作業,而遠端github,並沒有同步。

這時可下:

 git remote add origin git@github.com:timloo0710/Iron_man_30_days.git
git push origin master

就把本機的異動,同步到遠端。

結論:
一個人用的時候,
感覺版本控制,像是個方便的ftp,本機控制,就傳到遠端。

今天本來要用emacs的外掛,但老是測試有問題,
當然,emacs的精神是除了使用及整合外部工具之外,再簡化操作的介面。
這時如果有問題,我們可以 到emacs的shell 模式下,下指令。
仍把問題解決。

祝100年國慶,大家玩得愉快,賽德克巴萊早日破10億,下集的佈景場面,真得很豪華,
飛機,大炮的質感都不錯!!在台中日新9樓的大的放映廳看的,上集是在只有1/3的小廳看的


上一篇
emacs 做中學第三天(連續30天的GCC/GDB)
下一篇
emacs 做中學第五天
系列文
emacs的30天學習筆記38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
timloo
iT邦研究生 2 級 ‧ 2013-10-20 17:06:11

我早己忘了之前曾經用過github,

兩年前,真沒想到LINUS 在多年後,

又再一次爆紅。

大家都要講它,

在二年前,真是始料未及。

我要留言

立即登入留言