Search Google

Showing posts with label git. Show all posts
Showing posts with label git. Show all posts

Monday, August 17, 2015

object xxx corrupted on Git server...

下午完成今天預定的SIT測項回到專案室後不久就聽到有人在召喚我 -- "James, 連不上Git啦"

心想該不會是server重開之後IP又跑走了吧, 接著putty借由顯示出login提示字元馬上打槍了, 我的第一個猜測, 嘴巴不禁嘀咕著 -- "那我們就來fetch all看看吧", 話才剛說完就立刻看到下面的錯誤訊息:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"C:\Program Files (x86)\Git\bin\git.exe" fetch --progress "--all"
Fetching origin
fatal: object 43670bde54a8e639e3ad06e0ca9b95f3e8d790e8 is corrupted
fatal: Could not read from remote repository.


Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch origin
Done
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
反正出來跑遲早要還, 怎麼還? 通常問Google就好了
沒想這個錯誤居然是如此的generic, 可能造成的原因一籮筐, 找了半天看到一堆git指令
git fsck --full
git cat-file xxx
git repack
git ...
等做法, 但是沒一個管用的, 不過倒是對一個關鍵字印象深刻 -- "empty file"
好吧, 那就試試看把這些empty file先備份再移除看看會發生什麼事情, 但是找了半天卻找不到傳說中名稱為"43670bde54a8e639e3ad06e0ca9b95f3e8d790e8"的檔案, 說時遲那時快, 看到objects目錄下有一堆二位數hex編碼的目錄, 想說好吧那就來找找"./43/670bde54a8e639e3ad06e0ca9b95f3e8d790e8", 果然一猜就中(樂透運都這樣被用掉了吧), 仔細一看檔案大小果然是0 byte, 移除之後很開心地執行git fsck想說這樣就結束了...
事情果然沒有"拱廊"所想的那麼"甘丹", 又看到下一個object xxx is corrupted!
就這麼輪迴幾次後終於受不了, 最後大開殺戒以find . -size 0K -exec rm -f {} \;做了結.
把empty file清乾淨之後馬上又做一次git fetch --all, 立即看到不同的錯誤(表示有進展了, 值得開心 ~~), 這次的錯誤是reference的hash不存在, 好在這個提示就夠清楚明白, 把refs目錄下面meta data file裡的hash換成第二新(僅次於43670bde54a8e639e3ad06e0ca9b95f3e8d790e8)的hash後再執行git fetch --all果然可以用.
接著找出最後commit + push的人並把該更新的檔案重新commit + push一次, 終於替拯救Git server行動劃下完美句點.

Saturday, July 18, 2015

Bluemix業配文+入門教學

身為I社的一份子, 當公司全力在推CAMSS的時候一定也要來盡點心力, 我想大家對於中規中舉的介紹早已麻木, 所以就讓擅長打野武士戰法的我來跟大家介紹如何開開心心地以非正規的方式使用Bluemix提供的免費功能~

今天要介紹的功能是大部分webapp所環繞著的三大要素
1. Runtime server
2. Git server
3. DB server

1. Runtime server目前涵蓋了以下幾種大家常見的環境:
雖然我個人偏好在local跑Runtime server, 畢竟要設定或debug時還是比較方便, 但是如果可以在Bluemix上面跟客戶做完最後一哩路測試等於可以省去系統轉移+後續測試所需的工, 因為測試完之後只需要將帳號轉移給業主管理就結束了, 光是這點我想對許多SOHO族是相當有利, 而業主每個月付的費用就是原本需要花費的web hosting service費用.


想知道更多關於如何開始使用Runtime server請點這

2. 為什麼要特別提到Git server呢? 不就是做版本控管嗎?
是的, 在開發的過程中大家多多少少會需要做source code的版本控管, 也因為近年來許多opensource project陸續放到GitHub上讓越來越多人使用Git做版本控管.
要使用Git做版本控管一定要有個Git server, 如果用免費版的GitHub就表示所有放上去的source code自動成為opensource, 如果不想讓自己的source code變成opensource通常有兩種方式: (a) 付錢成為GitHub的付費使用者就可以把repository/project轉成私人模式, (b) 自己架Git server.
對於不想付費又不想自己架Git server的使用者而言, Bluemix提供的DevOps服務就顯得格外有用. 透過Bluemix的DevOps服務可以建立private Git server做版本控管同時保有source code的ownership.
想知道如何從local git client使用Bluemix提供的Git server請點這

3. webapp絕大部分應該都會需要用到DB, 以往我們難免需要自己在local電腦上架個DB server或付費租用線上DB才能開始開發測試. 今天Bluemix真正實現了"只要有心人人都可以有100MB的免費DB空間可用"!
這個部份比較tricky, 正規文件裡面並沒有特別說明(匆匆帶過倒是有), 所以在這裡特別說明如何從local端存取Bluemix提供的DB instance.
首先我們需要先有一個Runtime server instance (可以參照第1點結尾的連結), 這樣申請下來的DB server才有地方可掛 --> 才有地方可以看設定.
接著點擊上圖紅色框框申請DB server instance, 要注意的是下圖中的兩個紅色框框. 上面的紅色框框指定新申請的DB server instance要掛到哪一個Runtimer server instance, 下面的紅色框框指名要使用免費方案 --> 100MB空間 + 10 concurrent connections
到目前為止我們知道我們有了一個Runtime server + 一個DB server, 接下來我們要透過Runtime server的設定取得DB server的連線資訊. 從Bluemix的儀表板中看到一個Runtime server instance:

點進上圖下方紅色框框代表的Runtime server instance之後可以看到該instance的配置
到這裡我們就已經快要完成取經任務, 只要再點進上圖中左方panel中的"環境變數"就可以看到DB的設定參數!

有了上圖中右邊兩個紅色框框的資訊我們就可以從local直接透過Internet存取這100MB的free DB.

當然, 不把DB掛進Runtime server也可以透過DB service提供的web UI進行"簡單"的操作
如果想要透過這個web UI匯入格式稍微複雜一點的資料就會碰壁, web UI畢竟無法提供command line指令的細顆粒度微調, 所以我還是偏好直接透過Data Server Runtime Client直接建立remote connection操作的野武士戰法.

相信沒有直接按"End"鍵一路看到這裡的捧友們此時對於如何使用Bluemix提供的service已經有更深一層的了解, 雖然不是太正規的用法, 但是我相信對於中小企業的企業主與SOHO族們應該相當有幫助.

我們下回見~