2013年9月18日 星期三

Git 簡介、常用指令

Git是用於Linux核心開發的版本控制工具。與CVSSubversion一類的集中式版本控制工具不同,它採用了分布式版本庫的作法,不需要伺服器端軟體,就可以運作版本控制,使得原始碼的發布和交流極其方便。Git的速度很快,這對於諸如Linux kernel這樣的大項目來說自然很重要。Git最為出色的是它的合併追蹤(merge tracing)能力。



常用指令


git clone {account}@{host}:{project}.git

git add
git add .
將資料先暫存到 staging area, add 之後再新增的資料,
於此次 commit 不會含在裡面.
git add filename
git add modify-file
修改過的檔案, 也要 add. (不然 commit 要加上 -a 的參數)
git add -u
只加修改過的檔案, 新增的檔案不加入.
git add -i
進入互動模式
git rm filename
刪除檔案
git mv filename new-filename
修改檔名、搬移目錄
git status
看目前的狀態

git tag
git tag
列出既有 tag
git tag -l "XX.*"
搜尋XX.*

git reset
git reset xxxx --hard
強制恢復到某一版本
git reset --soft HEAD^
執行 git commit,發現訊息寫錯想要修改,可以使用。
       會刪掉 commit,在執行一次 commit 就可。

git branch & git checkout
local 端產生新的 branch
git branch
列出目前有多少 branch
    git branch –r
列出所有 Repository branch
    git branch –a
列出所有 branch
git branch new-branch
產生新的 branch (名稱: new-branch), 若沒有特別指定,
會由目前所在的 branch / master 直接複製一份
git branch new-branch master
master 產生新的 branch(new-branch)
git branch new-branch v1
tag(v1) 產生新的 branch(new-branch)
git branch -d new-branch
刪除 new-branch
git branch -D new-branch
強制刪除 new-branch
git checkout -b new-branch test
產生新的 branch, 並同時切換過去 new-branch

local 端切換 branch
git checkout branch-name
切換到 branch-name
git checkout -b new-branch test
產生新的 branch, 並同時切換過去 new-branch
git checkout filename
還原檔案到 Repository 狀態
git checkout HEAD
將所有檔案都還原到上一版(最後一次 commit 的版本).
(git checkout -f 亦可)
git checkout xxxx
將所有檔案都還原到 xxxx commit 的版本
git checkout -- *
恢復到上一次 Commit 的狀態(*改成檔名, 就可以只恢復那個檔案)

local New Repository
git init
git add .
git commit -m "init"

git remote add origin git@10.1.100.xx:{Repository Name}.git
# Creates a remote named "origin" pointing at your GitHub repository

如何在 remote site 增加/移除一個 branch
    git push origin origin:refs/heads/branch_name
如果 branch_name 不存在的話
git push origin local_branch_name:remote_branch_name
如果 branch 已經在 local 了,只是要推上去
Or
git push origin HEAD
如果 branch 已經在 local 了,只是要推上去
加入branch對應設定
vim .git/config

如何移除 remote site branch
git push origin :heads/branch_name
branch_name 是你想要移除的 remote branch 名稱

移除 remote site branch 描述資料,branch –a 時就不會再列出
git remote prun origin

開始追蹤 remote branch (當你下一次 pull, 你會對那個新的 branch_name sync)
    git checkout --track -b branch_name origin/branch_name

git commit
     git commit -m "註解" -a
     git commit -F commit.txt -a

git pull & push
git push origin master –tags
master 是你想要推上的 branch, --tags 若有 tag 一起推上.
git pull origin master
master 是你想要 sync branch.
git blame
git blame
git blame hello.c

是一個看誰在哪一版修改了什麼的工具。

MongoDB 簡介、常用指令


mongodbC++寫就,其名字來自humongous這個單詞的中間部分,從名字可見其野心所在就是海量資料的處理。關於它的一個最簡潔描述為:scalable, high-performance, open source, schema-free, document-oriented databaseMongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集兩者的優勢於一身。



一些概念
一個mongod服務可以有建立多個資料庫,每個資料庫可以有多張表,這裡的表名叫collection,每個collection可以存放多個文檔(document),每個文檔都以BSONbinary json)的形式存放於硬碟中,因此可以存儲比較複雜的資料類型。它是以單文檔為單位存儲的,你可以任意給一個或一批文檔新增或刪除欄位,而不會對其它文檔造成影響,這就是所謂的schema-free,這也是文檔型資料庫最主要的優點。跟一般的key-value資料庫不一樣的是,它的value中存儲了結構資訊,所以你又可以像關係型數據庫那樣對某些域進行讀寫、統計等操作。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關聯式資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。Mongo還可以解決海量資料的查詢效率,根據官方文檔,當資料量達到50GB以上資料時,Mongo資料庫存取速度是MySQL10 倍以上。

BSON
BSONBinary JSON 的簡稱,是一個JSON文檔物件的二進位編碼格式。BSONJSON一樣支援往其它文檔物件和陣列中再插入文檔物件和陣列,同時擴展了JSON的資料類型。如:BSONDate類型和BinDate類型。
BSON被比作二進位的交換格式,如同Protocol Buffers,但BSON比它更“schema-less”,非常好的靈活性但空間佔用稍微大一點。

BSON有以下三個特點:
1  羽量級
2  跨平臺
3  效率高



shell操作資料庫:

   1.  超級用戶相關:
         1. #進入資料庫admin
use admin
         2. #增加或修改使用者密碼
          db.addUser('name','pwd')
         3. #查看用戶列表
          db.system.users.find()
         4. #用戶認證
          db.auth('name','pwd')
         5. #刪除用戶
          db.removeUser('name')
         6. #查看所有用戶
          show users
         7. #查看所有資料庫
          show dbs
         8. #查看所有的collection
          show collections
         9. #查看各collection的狀態
          db.printCollectionStats()
        10. #查看主從複製狀態
          db.printReplicationInfo()
        11. #修復資料庫
          db.repairDatabase()
        12. #設置記錄profiling0=off 1=slow 2=all
          db.setProfilingLevel(1)
        13. #查看profiling
          show profile
        14. #拷貝資料庫
          db.copyDatabase('mail_addr','mail_addr_tmp')
        15. #刪除collection
          db.mail_addr.drop()
        16. #刪除當前的資料庫
          db.dropDatabase()
       
   2. 增刪改
         1. #存儲嵌套的物件
db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})

         2. #存儲陣列物件
db.user_addr.save({'Uid':'yushunzhi@sohu.com','Al':['test-1@sohu.com','test-2@sohu.com']})

         3. #根據query條件修改,如果不存在則插入,允許修改多條記錄
            db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)
         4. #刪除yy=5的記錄
            db.foo.remove({'yy':5})
         5. #刪除所有的記錄
            db.foo.remove()

   3. 索引
         1. #增加索引:1(ascending),-1(descending)
         2. db.foo.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
         3. #索引子物件
         4. db.user_addr.ensureIndex({'Al.Em': 1})
         5. #查看索引資訊
         6. db.foo.getIndexes()
         7. db.foo.getIndexKeys()
         8. #根據索引名刪除索引
         9. db.user_addr.dropIndex('Al.Em_1')

   4. 查詢
         1. #查找所有
        2. db.foo.find()
        3. #查找一條記錄
        4. db.foo.findOne()
        5. #根據條件檢索10條記錄
        6. db.foo.find({'msg':'Hello 1'}).limit(10)
        7. #sort排序
        8. db.deliver_status.find({'From':'ixigua@sina.com'}).sort({'Dt',-1})
         9. db.deliver_status.find().sort({'Ct':-1}).limit(1)
        10. #count操作
        11. db.user_addr.count()
        12. #distinct操作,查詢指定列,去重複
        13. db.foo.distinct('msg')
        14. #”>=”操作
        15. db.foo.find({"timestamp": {"$gte" : 2}})
        16. #子物件的查找
        17. db.foo.find({'address.city':'beijing'})


mongod.exe -dbpath XX/XXX/XX