<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    from:http://beta.segmentfault.com/q/1010000002564327

    作為 Repo 的維護者,最常見的事情就是從某一 ref 開始到 HEAD保留下來,然后之前的歷史刪除。因為這個任務比較常見,所以這里也有一個 shell script 分享給你:

    #!/bin/bash git checkout --orphan temp $1 git commit -m "截取的歷史記錄起點" git rebase --onto temp $1 master git branch -D temp 

    使用的時候這樣(比如該腳本保存叫 git-detach): git-detach <ref>,其中 <ref> 就是你要保留的歷史記錄的起點。

    需要注意的是,這個腳本只是把歷史記錄“分離”開來,然后其中的一部分沒有了可見的引用因此在歷史記錄里看不見,然而它們的 git object 仍然存在(換言之你還能恢復過來,自行查閱 git-reflog),如果你真要徹底丟掉這些歷史(為了給 repo 減肥),可以用 git gc --prune,那就再也找不回來了。

    P.S. 這個腳本依賴 Orphan Branch,低版本的 Git 不支持(大概是 < v1.7.x),有替代方案自己 Google 吧

    $ git filter-branch --tree-filter 'rm -f testme.txt' HEAD
    Rewrite bb383961a2d13e12d92be5f5e5d37491a90dee66 (2/2)
    Ref 'refs/heads/master'
     was rewritten
    $ git ls-remote .
    230b8d53e2a6d5669165eed55579b64dccd78d11        HEAD
    230b8d53e2a6d5669165eed55579b64dccd78d11        refs/heads/master
    bb383961a2d13e12d92be5f5e5d37491a90dee66        refs/original/refs/heads/master
    $ git update-ref -d refs/original/refs/heads/master [bb383961a2d13e12d92be5f5e5d37491a90dee66]
    $ git ls-remote .
    230b8d53e2a6d5669165eed55579b64dccd78d11        HEAD
    230b8d53e2a6d5669165eed55579b64dccd78d11        refs/heads/master
    $ rm -rf .git/logs
    $ git reflog --all
    $ git prune
    $ git gc
    $ du -hs
     84K    .

    posted @ 2015-03-26 18:32 小馬歌 閱讀(852) | 評論 (0)編輯 收藏
     
    跟蹤取消:                                $ git rm --cached x.txt
     
    跟蹤取消的含義是,把文件從git中拿出來,不再進行版本跟蹤,但保留工作區的文件。操作前,如果:
     
     
           1)該文件處于已提交狀態,則此操作把該文件置成“未跟蹤”狀態,同時,隱性的執行了該文件的需要提交刪除操作。再執行 git commit -m "...", 該文件徹底從 repository 中刪除。       此命令能執行是因為“已暫存”與“已提交”一致。
     
           2)該文件處于“已提交”狀態之后的“已修改”。則此操作把該文件置成“未跟蹤”狀態,同時,隱性的執行了該文件的需要提交刪除操作。再執行 git commit -m "...", 該文件徹底從 repository 中刪除。而且,已經修改的文件保留,不會丟失。此命令能執行是因為“已暫存”與“已提交”一致。
     
           3)該文件處于“已暫存”狀態之后未修改。則此操作把該文件置成“未跟蹤”狀態,同時,隱性的執行了該文件的需要提交刪除操作。再執行 git commit -m "...", 該文件徹底從 repository 中刪除。此命令能執行是因為“已提交”與“已修改”一致。
     
     
           4)該文件處于“已暫存”狀態之后的“已修改”。         此命令不能執行,因為“已暫存”既與“已提交”不一致,也與“已修改”不一致,造成信息丟失的風險,因此,對用戶進行風險提示。如果強行刪除,則需要加 -f , 即, git rm -f --cached a.txt。 結果是, 把該文件置成“未跟蹤”狀態,同時,隱性的執行了該文件的需要提交刪除操作。再執行 git commit -m "...", 該文件徹底從 repository 中刪除。此命令丟失原“已暫存”信息。
     
     
          注意:git rm -f --cached a.txt  與 git rm -f a.txt 之間的區別: 前者保留工作區的文件,后者是全部刪除。
     
    補充提交:                                $ git commit --amend
    說明: 如果上次提交之后沒有Stage新的文件,則這次補充提交只更新提交說明。
           如果有重新stage的文件,則這次提交把該文件加入到上次提交,即,本次補充和上次提交合并成一個。
    暫存取消:                                $ git reset HEAD benchmarks.rb
    注意:如果一個文件已經暫存了一個版本,后來又暫存了一個更新的版本,然后用git reset HEAD 取消后暫存的版本,則第一次暫存的本版不會恢復。
    修改取消:                                $ git checkout -- benchmarks.rb
    注意:如果已暫存之后沒提交,進行了修改,這個修改取消,使用已暫存來覆蓋,而不是已提交的;如果該已暫存已提交,則使用已提交覆蓋。也就是說,要想徹底的用已提交的版本覆蓋本地修改,則要查看該文件是否有已暫存,如果有,要用上一個命令先把它清除。
    注意:修改取消后,無法恢復。
    總之,只要提交的東西,總能想法設法找回來,但沒提交的東西,一旦被覆蓋,就有可能永久丟失。
    [遠程操作]
    顯示配置了哪些遠程服務器:                      $ git remote                                     
    顯示配置了哪些遠程服務器,同時顯示URL:         $ git remote -v             
    顯示遠程 詳細信息:                             $ git remote show origin
    修改遠程標識名字:                              $ git remote rename pb paul
    刪除遠程配置:                                  $ git remote rm paul
    增加一個遠程配置:                   $ git remote add pb git://github.com/paulboone/ticgit.git 
    獲取:                              $ git fetch pb
    或者:                               $ git fetch origin
    注意:
    1)該分支可以用 pb/master 訪問
    2)獲取到本地之后,并未自動merge,也未改變本地任何東西。
    推送:                               $ git push origin master
    注意,推送的條件:
    1)從該遠程克隆;
    2)有寫權限;
    3)從上次克隆(或推送)至今沒有更新,如果有更新,則你要先 fetch 然后再push。
    標簽操作:
    查看所有標簽:                               $ git tag
    注意:標簽顯示的順序無太多含義。
    查看特定標簽:                               $ git tag -l 'v1.4.2.*'
    打新標簽:                                   $ git tag -a v1.4 -m 'my version 1.4'
    顯示某個標簽:                               $ git show v1.4
    簽署標簽:                                   $ git tag -s v1.5 -m 'my signed 1.5 tag'
    輕量級標簽:                                 $ git tag v1.6
    驗證標簽:                                   $ git tag -v v1.4.2.1
    后期加注標簽:                               $ git log --pretty=oneline
                                                 $ git tag -a v1.2 9fceb02
    分享(推送)標簽:                           $ git push origin v1.5
    分享(推送)所有標簽:                       $ git push origin --tags
    posted @ 2015-03-26 09:50 小馬歌 閱讀(276) | 評論 (0)編輯 收藏
     
    【簡介】 
    版本控制系統(VCS, Version Control System) 可以分為集中式(CVCS, Centralized Version Control System, 如 CVS, Subversion)和分布式(DVCS, Distributed Version Control System,如 Git 等)版本控制系統。
    傳統的集中式版本控制系統,本地只保存代碼庫的一個版本拷貝。 所有歷史版本都保存在服務器。GIT 與之最大的不同是,本地不僅保存一個快照,而且保存著整個代碼庫(repository)。因此它可以“離線”工作。 
    在 Window 上安裝: http://code.google.com/p/msysgit
    GIT 起源于 LINUX 開發。Linux 開發早期(1992-2002)沒有使用版本控制工具,直到 2002 年開始使用一個非開源的工具 BitKeeper。一開始這個工具還給 Linux 免費使用,后來想收費了,充滿自由精神 Linux 成員們肯定不會屈服于這個要挾,一怒之下開發了一個自由的版本控制工具。2005 年,GIT 誕生 。
     
    參考:官網:http://git-scm.com/
         手冊:http://www.kernel.org/pub/software/scm/git/docs/
         參考:http://gitref.org/
         ProGit: http://progit.org/book/
    【GIT 基礎】
     
    GIT 使用 SHA-1 哈希碼(40個字符)來標識提交,同時保證本次提交后整體(一個快照)的完整性。 
    文件狀態:
    文件狀態分為:未跟蹤 (untracked) 和已跟蹤 (tracked),已跟蹤又分為三種狀態: 已暫存(staged),已修改(modified),已提交(committed)
    一般過程如下:
    1) 新建文件,該文件狀態為“未跟蹤”,位于工作區;
    2) 用 git add a.txt  加入該文件,狀態變為已跟蹤的“已暫存”,位于暫存區;
    3) 用 git commit a.txt -m "ha"  提交該文件,狀態變為“已提交”,位于代碼庫(repository )
    或者,如果存在修改的情況,增加如下2.1和2.2兩個步驟:
     
    1) 新建文件,該文件狀態為“未跟蹤”,位于工作區;
    2) 用 git add a.txt  加入該文件,狀態變為已跟蹤的“已暫存”,位于暫存區;
    2.1)編輯該文件并保存,狀態變為“已修改”,位于工作區。(注意,位于暫存區的文件獨立存在!)
    2.2) 用 git add a.txt  加入該文件,狀態變為“已暫存”,位于暫存區。(注意,原暫存區的文件被覆蓋!)
    3) 用 git commit a.txt -m "ha"  提交該文件,狀態變為“已提交”,位于代碼庫(repository )
    考慮更廣泛的情況,狀態遷移圖如下所示: 
    Git <wbr>使用 <wbr>- <wbr>1. <wbr>文件操作和歷史查看
    注意:用 git status 查看目前所有文件的狀態。
    GIT 配置:
    三種配置范圍類型:
    1)所有用戶 --system,   存在 /etc/gitconfig 文件中。(對windows來說,是 msysgit 的安裝目錄)
    2)本用戶 --global,    存在 ~/.gitconfig  文件中。(對windows 來說,是 C:\Documents and Settings\$USER)
    3)本項目               存在 .git/config 文件中。
    注意:后面的重載前面的。例如:用--global設置,可以在所有項目中使用這個設置;如果有一個項目你想使用一個特別的設置,就可以使用不帶參數的 git config 重新設置,則它只作用于這個項目。如果用 git config --list 查看這些設置,可能會列出多個,但最后那個起作用。
    用戶信息
    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com
    文本編輯器
    $ git config --global core.editor emacs
    查看配置信息
    $ git config --list
    或者只看一個信息:
    $ git config <key>
    【常用操作】 
    (GIT 1.7.4 on  Windows)
    獲取幫助:                       $ git help <verb>
    初始化倉庫:                     $ git init
    (說明: 如果該目錄有文件,則都會處于“未跟蹤”狀態的。)
    克隆倉庫:                       $ git clone git://github.com/schacon/grit.git
    克隆倉庫,并換個名字:           $ git clone git://github.com/schacon/grit.git mygrit
    跟蹤一個新文件:                 $ git add readme.txt
    說明: 
    1) 跟蹤之后,該文件狀態是“已暫存”的。 (Changes to be committed:)
    2)修改一個已暫存的文件,該文件會出現在兩個記錄區中。
    3) 如果跟蹤錯了,想把他刪除(不刪除工作區的),則用 git rm --cached readme.txt。狀態變成“未跟蹤”,如果該文件已經修改了,則加  -f 參數強行刪除暫存區的文件(已修改的文件不被覆蓋)。
    跟蹤一組新文件:                 $ git add *.txt
    跟蹤一個目錄中的所有文件:       $ git add mydir
    說明:如果該目錄下有子目錄,則進行遞歸操作。
    修改之后,暫存一個文件:                           $ git add readme.txt
    說明:取消已暫存的文件(已暫存到已修改):         $ git reset HEAD readme.txt
    忽略某些文件:                   在.gitignore 文件中加入下面兩行:    *.[oa]    *~
    *.a       # 忽略所有 .a 結尾的文件
    !lib.a    # 但 lib.a 除外
    /TODO     # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
    build/    # 忽略 build/ 目錄下的所有文件
    doc/*.txt # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    注意:.gitignore 文件放在工程的根目錄即可,但是要把它用 git add 加入跟蹤或者提交。
     
    比較:
    查看尚未暫存的更新:                   $ git diff
    說明:比較“已修改”和“已暫存(或已提交)”。
    查看尚未提交的更新:                    $ git diff --cached
          或                               $ git diff --staged
    說明:比較“已暫存”和已提交。 
     
    提交:
    提交更新(只更新暫存中的):           $ git commit
    提交更新(只更新暫存中的):           $ git commit -m "task12, added implementation for usr mrg."
    直接提交更新(更新暫存中的和已修改的): $ git commit -a -m "task12, added implementation forg."
    從文件中取注釋:                       $ git commit --file notefile
     
    重新獲取:
    拋棄已修改,用已提交覆蓋               $ git checkout A.java
    說明:此命令對已暫存文件沒作用。 
     
    刪除文件:
    從工作區可以直接刪除文件,這是運行 git status, 顯示:
     
      Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
          deleted:    a
    可以用 git rm 刪除 a。注意:如果 a 是已提交的文件,則還需要運行 git commit 以確保在代碼庫中刪除。如果該文件尚未提交,則無需運行git commit。 
    也可以直接使用 git rm 刪除文件,但如何文件處于“已修改” 則需要加 -f
    移除已跟蹤文件,恢復到“未跟蹤”       $ git rm --cached A.java
    說明:如果文件已修改,則需 -f ,并且不覆蓋修改過的內容。 
    強行移除修改后文件(從暫存區和工作區中刪除):      $ git rm -f a.a 
    移除目錄下的所有文件(遞歸):                    $ git rm log/\*.log
    移除目錄下的所有文件(無遞歸):                  $ git rm log/*.log
     
    改名(只改工作區和暫存區):                      $ git mv file1 file2
    相當于:                                          $ mv README.txt README
                                                      $ git rm README.txt
                                                      $ git add README
    歷史查看 :
    查看提交歷史(全部):                             $ git log
    查看提交歷史,并顯示統計信息:                    $ git log --stat
    查看提交歷史并查看差異:                          $ git log -p
    查看最近2次提交歷史并查看差異:                   $ git log -p -2
    查看最近2周內提交歷史:                           $ git log --since=2.weeks
    查看某個時刻之后的提交歷史:                      $ git log --since="2008-09-14"
    查看某個時刻以前的提交歷史:                      $ git log --until="2008-09-14"
    查看某個作者的提交歷史:                          $ git log --author="stupid"
    其他:
    -(n) 僅顯示最近的 n 條提交
    --since, --after 僅顯示指定時間之后的提交。
    --until, --before 僅顯示指定時間之前的提交。
    --author 僅顯示指定作者相關的提交。
    --committer 僅顯示指定提交者相關的提交。
    例如:
    $ git log --pretty="%h:%s" --author=gitster --since="2008-10-01" \
       --before="2008-11-01" --no-merges -- t/
     
    查看提交歷史,并單行顯示:                        $ git log --pretty=oneline
    查看提交歷史,并格式化顯示:                      $ git log --pretty=format:"%h - %an, %ar : %s"
    例如:
    $ git log --pretty=format:"%h - %an, %ar : %s"
    ca82a6d - Scott Chacon, 11 months ago : changed the version number
    085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
    a11bef0 - Scott Chacon, 11 months ago : first commit
     
    %H 提交對象(commit)的完整哈希字串
    %h 提交對象的簡短哈希字串
    %T 樹對象(tree)的完整哈希字串
    %t 樹對象的簡短哈希字串
    %P 父對象(parent)的完整哈希字串
    %p 父對象的簡短哈希字串
    %an 作者(author)的名字
    ? 作者的電子郵件地址
    ? 作者修訂日期(可以用 -date= 選項定制格式)
    %ar 作者修訂日期,按多久以前的方式顯示
    %cn 提交者(committer)的名字
    ? 提交者的電子郵件地址
    ? 提交日期
    %cr 提交日期,按多久以前的方式顯示
    %s 提交說明
     
    查看提交歷史,并圖形化顯示:               $ git log --pretty=format:"%h %s" --graph
    例如:
    $ git log --pretty=format:"%h %s" --graph
    * 2d3acf9 ignore errors from SIGCHLD on trap
    *  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
    |\
    | * 420eac9 Added a method for getting the current branch.
    * | 30e367c timeout code and tests
    * | 5a09431 add timeout protection to grit
    * | e1193f8 support for heads with slashes in them
    |/
    * d6016bc require time for xmlschema
    *  11d191e Merge branch 'defunkt' into local
     
    其它:
    -p 按補丁格式顯示每個更新之間的差異。
    --stat 顯示每次更新的文件修改統計信息。
    --shortstat 只顯示 --stat 中最后的行數修改添加移除統計。
    --name-only 僅在提交信息后顯示已修改的文件清單。
    --name-status 顯示新增、修改、刪除的文件清單。
    --abbrev-commit 僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符。
    --relative-date 使用較短的相對時間顯示(比如,“2 weeks ago”)。
    --graph 顯示 ASCII 圖形表示的分支合并歷史。
    --pretty 使用其他格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(后跟指定格式)。
     
    最重要的是,如果你覺著上面這些查看歷史的命令太難用,你可以使用圖形化工具:gitk,一切都清晰了。
    posted @ 2015-03-26 09:47 小馬歌 閱讀(420) | 評論 (0)編輯 收藏
     
    [基本概念] 
    GIT branch 的本質是一個提交鏈表的指針。創建一個新的branch,實質是創建了當時提交鏈表的一個新指針。該指針和原指針獨立操作,各自疊加新的提交后,形成各自的分支鏈。
    “在分支上”的含義,新建一個分支之后,建立此分支以前的提交也稱為在這個分支上。
    HEAD的含義:當前branch。 隨著git branch checkout <branch> 改變。
    分支不是線形性:如果發生過merge,則即使 HEAD 相同,鏈表也不具有唯一性。(即某些提交有多父情況)
     
    為什么要及時刪掉不用的分支:防止提交查看時顯示過多的分支。
    merge 時,如果自動merge沒有沖突,則 GIT 產生一個新的提交。如果有 沖突,則GIT產生一個未提交。
    實踐中,可以有三個分支:
    1, master
    2, dev
    3, Topic:針對某個具體問題,短期存在,需要經常的rebase。
    問題:如果刪除一個分支,那么它上面的未 merge 的提交會一起刪除嗎?
    [基本操作]
    查看分支:                                       $ git branch
    創建分支:                                      $ git branch mybranch
    切換分支:                                      $ git checkout mybranch
    創建并切換分支:                                $ git checkout -b mybranch
    合并分支:(merge from)                          $ git checkout master
                                                    $ git merge mybranch   (merge from mybranch)
    使用 merge工具(有沖突的情況下):              $ git mergetool
    刪除分支:                                      $ git branch -d mybranch
    強制刪除分支 (上面有尚未 merge 的提交):        $ git branch -D mybranch
    列出所有分支:                                  $ git branch
    查看各個分支最后一次提交:                      $ git branch -v
    查看哪些分支合并入當前分支(可以刪了):        $ git branch --merged
    查看哪些分支未合并入當前分支:                  $ git branch --no-merged
    遠程: 
    更新遠程庫到本地:                              $ git fetch origin
    如果有新分支,則分支名:orgin/<branch>
     
    取遠程分支合并到本地分支:                      $ git merge origin/mybranch
    用遠程分支建一個本地分支:                      $ git checkout -b mybranch origin/mybranch
    推送分支:                                      $ git push origin mybranch
     
    推送分支,并換個名字:                          $ git push origin serverfix:awesomebranc
    刪除遠程分支:                 $ git push origin  :mybranch
     
    rebase:                                         $ git checkout mybranch
                                                    $ git rebase master    (rebase from master)
     
    舉例:                                          $ git checkout server
                                                    $ git rebase --onto master server client
                                                    $ git checkout master
                                                    $ git merge client  (fostforward)
                                                    $ git rebase master server  (checkout sever)
                                                    $ git merge server
                                                    $ git branch -d client
                                                    $ git branch -d server
     
    merge 和 rebase 的區別:
    1),從文件結果看,merge 和 rebase 可以達到同樣效果。 
    2),從歷史紀錄看,他們存在差異:merge 顯示合并后的多父結點,呈現環形, 而 rebase 呈現線性結果,即它對分支歷史進行合并操作。rebase 提供更好的歷史呈現方式(似分支從未曾發生過),但有風險。 掌握一條原則:Do not rebase commits that you have pushed to a public repository. 即,不要對你提交過的分支進行 rebase。因為本地的改變會造成遠端的困惑。 
    3), 在實踐中,可以盡量用 merge,慎用 rebase。
    posted @ 2015-03-26 09:26 小馬歌 閱讀(237) | 評論 (0)編輯 收藏
     

    標簽可以針對某一時間點的版本做標記,常用于版本發布。

    • 列出標簽

    $ git tag # 在控制臺打印出當前倉庫的所有標簽
    $ git tag -l ‘v0.1.*’ # 搜索符合模式的標簽

    • 打標簽

    git標簽分為兩種類型:輕量標簽和附注標簽。輕量標簽是指向提交對象的引用,附注標簽則是倉庫中的一個獨立對象。建議使用附注標簽。
    # 創建輕量標簽
    $ git tag v0.1.2-light

    # 創建附注標簽
    $ git tag -a v0.1.2 -m “0.1.2版本”

    創建輕量標簽不需要傳遞參數,直接指定標簽名稱即可。
    創建附注標簽時,參數a即annotated的縮寫,指定標簽類型,后附標簽名。參數m指定標簽說明,說明信息會保存在標簽對象中。

    • 切換到標簽

    與切換分支命令相同,用git checkout [tagname]
    查看標簽信息
    git show命令可以查看標簽的版本信息:
    $ git show v0.1.2

    • 刪除標簽

    誤打或需要修改標簽時,需要先將標簽刪除,再打新標簽。
    $ git tag -d v0.1.2 # 刪除標簽

    參數d即delete的縮寫,意為刪除其后指定的標簽。

    • 給指定的commit打標簽

    打標簽不必要在head之上,也可在之前的版本上打,這需要你知道某個提交對象的校驗和(通過git log獲取)。
    # 補打標簽
    $ git tag -a v0.1.1 9fbc3d0

    • 標簽發布

    通常的git push不會將標簽對象提交到git服務器,我們需要進行顯式的操作:
    $ git push origin v0.1.2 # 將v0.1.2標簽提交到git服務器
    $ git push origin –tags # 將本地所有標簽一次性提交到git服務器

     

    注意:如果想看之前某個標簽狀態下的文件,可以這樣操作

    1.git tag   查看當前分支下的標簽

    2.git  checkout v0.21   此時會指向打v0.21標簽時的代碼狀態,(但現在處于一個空的分支上)

    3. cat  test.txt   查看某個文件


    refer to:http://www.csser.com/dev/580.html

    posted @ 2015-03-20 11:41 小馬歌 閱讀(244) | 評論 (0)編輯 收藏
     

    轉:http://beginor.github.io/2013/03/12/migrate-from-svn-to-git.html

    準備工作

    確認所有用戶的本地修改都簽入到服務器, 將 SVN 源代碼的分支盡可能的合并到主干, 已經發布的做好歸檔信息, 并備份 SVN 庫。 雖然遷移到 Git 的風險不大, 但是備份一下總是好的。

    安裝 Git , 這看起來是廢話, 不裝 Git 怎么遷移?

    將用戶映射到 Git

    創建一個用戶映射文件, 將 SVN 用戶映射到 Git 用戶, 這樣可以保留用戶的簽入歷史信息, 比如用戶輸入的修改記錄等, 這個文件看起來是這樣子的:

    svnuser1 = gituser1 <gituser1@yourcompany.com> svnuser2 = gituser2 <gituser2@yourcompany.com> 

    這樣, 用戶 svnuser1 簽入的歷史信息在遷移之后就會映射成 gituser1 , svnuser2 映射程 gituser2 。

    編輯好用戶映射文件之后, 保存為 users.txt 。

    克隆 SVN 庫

    假設 svn 庫的布局是標準的 trunk 、 branches 以及 tags , 運行下面的命令開始克隆 svn 庫:

    git svn clone <svn repo url> --no-metadata -A users.txt -t tags -b branches -T trunk <destination dir name> 

    Git 會克隆 svn 完整的歷史記錄, 可能會需要很長的時間, 視 svn 庫的歷史而定。

    轉換分支及歸檔

    克隆完成之后, 所有的 svn 歸檔在 git 看來都是遠程分支 (remote tags) , 不是真正的 git 歸檔, 需要將他們手工轉換為 git 歸檔, 然后再刪除遠程分支, 對于每一個分支或歸檔, 做如下操作(以 v1.0.1 歸檔為例):

    git tag v1.0.1 tags/v1.0.1 git branch -r -d tags/v1.0.1 

    所有的歸檔信息處理完成之后, git 本地庫就有了完整的歷史記錄。

    提交到 Git 庫

    現在可以放心的將代碼提交到自己的 git 服務器了, 命令如下:

    git remote add origin git@github.com:userid/project.git git push origin master --tags 

    總的來說, 從 svn 遷移到 git 還是很容易的。

    posted @ 2015-03-20 10:57 小馬歌 閱讀(292) | 評論 (0)編輯 收藏
     

    Git如何進行分支管理?
         1、創建分支
         創建分支很簡單:git branch <分支名>
         2、切換分支
         git checkout <分支名>
         該語句和上一個語句可以和起來用一個語句表示:git checkout -b <分支名>
         3、分支合并
         比如,如果要將開發中的分支(develop),合并到穩定分支(master),
         首先切換的master分支:git checkout master。
         然后執行合并操作:git merge develop。
         如果有沖突,會提示你,調用git status查看沖突文件。
         解決沖突,然后調用git add或git rm將解決后的文件暫存。
         所有沖突解決后,git commit 提交更改。
         4、分支衍合
         分支衍合和分支合并的差別在于,分支衍合不會保留合并的日志,不留痕跡,而 分支合并則會保留合并的日志。
         要將開發中的分支(develop),衍合到穩定分支(master)。
         首先切換的master分支:git checkout master。
         然后執行衍和操作:git rebase develop。
         如果有沖突,會提示你,調用git status查看沖突文件。
         解決沖突,然后調用git add或git rm將解決后的文件暫存。
         所有沖突解決后,git rebase --continue 提交更改。
         5、刪除分支
         執行git branch -d <分支名>
         如果該分支沒有合并到主分支會報錯,可以用以下命令強制刪除git branch -D <分支名>

    http://winuxxan.blog.51cto.com/2779763/508955

    posted @ 2015-03-20 10:57 小馬歌 閱讀(206) | 評論 (0)編輯 收藏
     

    from:http://longgeek.com/2013/12/26/ci-system-structures-ii-gitlab-installation/#i-3

    2013-12-26日 | 標簽:    | 作者:

    PDF24 Creator    Send article as PDF     

    上一篇文章 CI 系統搭建:一. 基礎環境設置、規劃 大概規劃了下環境,本文主要用來記錄安裝 Gitlab 的過程,主要參考官方文檔 并沒有做太多的修改。

    設置源

    設置國內 163 apt 源

    # vim /etc/apt/sources.list deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted  deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted # apt-get update 

    安裝依賴包

    Gitlab 依賴包、庫

    sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev \                         libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall \                         libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate 

    安裝 markdown 文檔風格依賴包

    sudo apt-get install -y python-docutils  

    安裝 git,Gerrit 依賴 gitweb,同時 GitLab 依賴 git 版本 >= 1.7.10,Ubuntu apt-get 默認安裝的是 1.7.9.5,當然不升級也是沒有問題的

    sudo apt-get install -y git git-core gitweb git-review 

    升級 Git 版本(可選)

    sudo apt-get install -y git gitweb sudo apt-get remove git-core sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential cd /tmp curl --progress https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz | tar xz cd git-1.8.4.1/ make prefix=/usr/local all sudo make prefix=/usr/local install # * 如果升級了 git 的版本,相應修改 Gitlab.yml 中的 git 腳本位置,這一步在 clone gitlab 后在操作* sudo -u git -H vim /home/git/gitlab/config/gitlab.yml bin_path: /usr/local/bin/git 

    Gitlab 需要收發郵件,安裝郵件服務器

    sudo apt-get install -y postfix 

    如果安裝了 ruby1.8,卸載掉,Gitlab 依賴 2.0 以上

    sudo apt-get remove ruby1.8 

    下載編譯 ruby2.0

    mkdir /tmp/ruby && cd /tmp/ruby curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz cd ruby-2.0.0-p353 ./configure --disable-install-rdoc make sudo make install 

    修改 gem 源指向 taobao

    gem source -r https://rubygems.org/ gem source -a http://ruby.taobao.org/ 

    安裝 Bundel 命令

    sudo gem install bundler --no-ri --no-rdoc 

    系統用戶

    給 Gitlab 創建一個 git 用戶

    sudo adduser --disabled-login --gecos 'GitLab' git 

    GitLab Shell

    下載 Gitlab Shell,用來 ssh 訪問倉庫的管理軟件

    cd /home/git sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git cd gitlab-shell sudo -u git -H cp config.yml.example config.yml 

    修改 gitlab-shell/config.yml

    sudo -u git -H vim /home/git/gitlab-shell/config.yml gitlab_url: "http://gitlab.thstack.com/" 

    安裝 GitLab Shell

    cd /home/git/gitlab-shell sudo -u git -H ./bin/install 

    Mysql

    安裝 Mysql 包

    sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev 

    給 Gitlab 創建 Mysql 數據庫并授權用戶訪問

    sudo mysql -uroot -p > create database gitlabdb; > grant all on gitlabdb.* to 'gitlabuser'@'localhost' identified by 'gitlabpass'; 

    GitLab

    下載 GitLab 源代碼,并切換到最新的分支上

    cd /home/git sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab cd gitlab sudo -u git -H git checkout 6-4-stable 

    配置 GitLab,修改 gitlab.yml,其中 host: 項和 gitlab-shell 中 gitlab_url 的主機一致

    cd /home/git/gitlab sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml sudo -u git -H vim config/gitlab.yml host: gitlab.thstack.com email_from: gitlab@thstack.com support_mail: gitlab@thstack.com signup_enabled: true             #開啟用戶注冊 

    創建相關目錄

    cd /home/git/gitlab sudo -u git -H mkdir tmp/pids/ sudo -u git -H mkdir tmp/sockets/ sudo -u git -H mkdir public/uploads  sudo -u git -H mkdir /home/git/repositories sudo -u git -H mkdir /home/git/gitlab-satellites 

    修改相關目錄權限

    sudo chown -R git:git log/ tmp/ sudo chmod -R u+rwX  log/ tmp/ public/uploads 

    修改 unicorn.rb 監聽端口為:8081

    cd /home/git/gitlab/ sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb sudo -u git -H vim config/unicorn.rb listen "gitlab.thstack.com:8081", :tcp_nopush => true 

    配置 GitLab 訪問 mysql 數據庫設置

    cd /home/git/gitlab/ sudo -u git cp config/database.yml.mysql config/database.yml sudo -u git -H vim config/database.yml   *修改 Production 部分:* production:   adapter: mysql2   encoding: utf8   reconnect: false   database: gitlabdb   pool: 10   username: gitlabuser   password: "gitlabpass"   host: localhost   socket: /var/run/mysqld/mysqld.sock 

    設置 GitLab 使用指定郵箱發送郵件,注意 production.rb 的文件格式,開頭空兩格

    cd /home/git/gitlab/ sudo -u git -H vim config/environments/production.rb   #修改 :sendmail 為 :smtp   config.action_mailer.delivery_method = :smtp   config.action_mailer.smtp_settings = {     :address              => "smtp.googlemail.com",     :port                 => 587,     :domain               => 'thstack.com',     :user_name            => 'gitlab@thstack.com',     :password             => 'password',     :authentication       =>  :plain,     :enable_starttls_auto => true   } end          # 上面內容加入到 end 里面 

    安裝 gem

    修改 Gemfile 文件中源指向為 taobao

    cd /home/git/gitlab/ sudo -u git -H vim Gemfile source "http://ruby.taobao.org/" 

    雖然在文件中指向了國內 taobao 源,但是依然會卡一會,耐心等待…

    cd /home/git/gitlab/ sudo -u git -H bundle install --deployment --without development test postgres aws 

    初始化數據庫并激活高級功能

    cd /home/git/gitlab/ sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production 

    輸入 yes 來初始化數據庫、創建相關表,最后會輸出 GitLab Web 管理員用來登錄的賬號和密碼

    Do you want to continue (yes/no)? yes ... Administrator account created: login.........admin@local.host password......5iveL!fe 

    設置 GitLab 啟動服務

    cd /home/git/gitlab/ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab sudo update-rc.d gitlab defaults 21 

    設置 GitLab 使用 Logrotate 備份 Log

    cd /home/git/gitlab/ sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab 

    檢查GitLab及其環境的配置是否正確:

    cd /home/git/gitlab/ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production System information System:         Ubuntu 12.04 Current User:   git Using RVM:      no Ruby Version:   2.0.0p353 Gem Version:    2.0.14 Bundler Version:1.3.5 Rake Version:   10.1.0  GitLab information Version:        6.4.2 Revision:       214a013 Directory:      /home/git/gitlab DB Adapter:     mysql2 URL:            http://gitlab.thstack.com HTTP Clone URL: http://gitlab.thstack.com/some-project.git SSH Clone URL:  git@gitlab.thstack.com:some-project.git Using LDAP:     no Using Omniauth: no  GitLab Shell Version:        1.8.0 Repositories:   /home/git/repositories/ Hooks:          /home/git/gitlab-shell/hooks/ Git:            /usr/bin/git 

    啟動 GitLab 服務

    /etc/init.d/gitlab restart Shutting down both Unicorn and Sidekiq. GitLab is not running. Starting both the GitLab Unicorn and Sidekiq.. The GitLab Unicorn web server with pid 17771 is running. The GitLab Sidekiq job dispatcher with pid 17778 is running. GitLab and all its components are up and running 

    最后編譯一下

    sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production 

    Nginx

    安裝 Nginx 包

    sudo apt-get install -y nginx 

    配置 Nginx

    cd /home/git/gitlab sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab sudo vim /etc/nginx/sites-available/gitlab listen *:80 default_server; server_name gitlab.thstack.com; proxy_pass http://gitlab.thstack.com:8081; 

    啟動 Nginx

    /etc/init.d/apache2 stop /etc/init.d/nginx restart 

    訪問

    用瀏覽器訪問: http://gitlab.thstack.com 用戶名:admin@local.host 密碼:5iveL!fe 

    2: https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/insta llation.md

    界面簡單使用

    使用 admin@local.host 賬號登錄: gitlab-login

    登錄后系統讓修改密碼,先修改密碼: gitlab-set_pass

    修改完密碼后,用新密碼登錄一下,然后修改 Admin 用戶得郵箱地址為:admin@thstack.com gitlab-set-email

    點擊保存更改后,系統會自動給剛才輸入的郵箱地址發送一封確認修改信息,點擊郵件內容中的連接后會自動用新賬號郵箱登錄。

    創建一個 GROUP:

    gitlab-click-group

    輸入 Group 名字為:DevGroup gitlab-create-gourp

    點擊創建項目: gitlab-click-project

    創建一個項目,名為:OpenStack,這個項目屬于 DevGroup: gitlab-create-project

    創建完項目后,點擊添加 ssh 密鑰: gitlab-click-sshkey

    生成 admin@thstack.com 郵箱密鑰: gitlab-gen-sshkey

    在界面輸入剛才生成得密鑰: gitlab-add-sshkey

    再注冊一個賬號,登錄頁面點擊注冊按鈕: gitlab-click-user

    注冊一個 Longgeek 用戶,輸入郵箱、密碼,然后去輸入得郵箱驗證: gitlab-create-user

    創建一個 Longgeek 用戶,并生成密鑰: gitlab-longgeek-gen-sshkey

    用 longgeek@thstack.com 用戶登錄 GitLab,添加剛才生成得密鑰到 sshkey 里: gitlab-longgeek-add-sshkey

    用 admin@thstack.com 用戶登錄 GitLab,把 longgeek@thstack.com 添加到 DevGroup 組中,權限是 Reporter,這樣 longgeek 用戶也可以訪問 OpenStack 這個項目,不過沒有權限直接 Push: gitlab-add-longgeek-gourp

    用 longgeek@thstack.com 用戶登錄就可以看到 OpenStack 項目: gitlab-longgeek-view-project

    用 longgeek@thstack.com clone 項目,嘗試 push: gitlab-longgeek-try-push

    很顯然 longgeek 用戶是沒有 push 到 master 分支得權限。接下來會安裝 Gerrit、Jenkins。以及它們三個如何整合成流程。請參考后面得文章。

    posted @ 2015-03-19 16:37 小馬歌 閱讀(415) | 評論 (0)編輯 收藏
     


    Thrift在0.9.1版本之前,一直只提交了對單一接口服務的支持,即一個RPC服務器(對應一個端口)支持一個服務接口的實現。

    但是很多時候,我們的服務不能實現在一個接口里,一是接口里的方法越來越多,不好管理和使用;二是根據職責的單一要求,不能類型的方法,不能放在同一接口里。

    在 Thrift-0.9.1之前,我們要解決上面的問題,一是通過多個RPC服務器來實現,這個方法必然導致了我們RPC服務器越來越多,管理上麻煩;二是通過其他的一些途徑,如使用netty作為RPC服務器等,這個方法實現上相對麻煩一些,需要去了解netty的知識。

    這些方法在這里就不再詳述了。

    從Thrift-0.9.1開始,thrift開始提供對多接口服務的支持,使得我們開發多接口RPC服務相對簡單多了。

    這里還是給出例子來說明。

    首先,我們做了兩個接口定義文件來定義兩個接口:

    namespace javacom.eli.test.service

    struct Topic

    {

        1: i32 uid,

        2: string name,

        3: string content

    }

    service TopicService

    {

        void store(1: Topic topic),

        Topic retrieve(1: i32 uid)

    }

     

     

    namespace javacom.eli.test.service

    struct User

    {

        1: i32 uid,

        2: string name,

        3: string blurb

    }

    service UserService

    {

        void store1(1: User user),

        User retrieve1(1: i32 uid)

    }

     

     

    然后使用Thrift-0.9.1.exe生成相應的JavaBean及接口:

     

     

    然后,我們寫兩個接口的實現類:

    import org.apache.thrift.TException;

     

    import com.eli.test.service.Topic;

    import com.eli.test.service.TopicService;

     

    public class TopicImpl implements TopicService.Iface{

    public void store(Topic topic)throws TException

    {

            System.out.println("theinput topic: ");

            System.out.println("id:"+topic.getUid());

            System.out.println("name:"+topic.getName());

            System.out.println("content:"+topic.getContent());

    }

    public Topic retrieve(int uid)throws TException

    {

            System.out.println("theinput uid: "+uid);

            return newTopic(uid,"test","test");

    }

     

    }

     

     

     

    import org.apache.thrift.TException;

     

    import com.eli.test.service.User;

    import com.eli.test.service.UserService;

     

    public class UserImpl implements UserService.Iface{

     

    public void store1(User user)throws TException

    {

            System.out.println("theinput user: ");

            System.out.println("uid:"+user.getUid());

            System.out.println("name:"+user.getName());

            System.out.println("blur:"+user.getBlurb());

    }

    public User retrieve1(int uid)throws TException

    {

            System.out.println("theinput uid: "+uid);

            return newUser(uid,"tom","123");

    }

    }

     

     

     

    上述工作完成以后,就可以寫服務器代碼了。

    服務器代碼與單一接口的服務器代碼最大的不同是使用了“TMultiplexedProcessor”類,通過該類,可以注冊多個接口的服務實現類:

    TMultiplexedProcessor processor = new TMultiplexedProcessor();

                 

           processor.registerProcessor("TopicService"newTopicService.Processor<TopicService.Iface>(newTopicImpl()));

        processor.registerProcessor("UserService"new UserService.Processor<UserService.Iface>(new UserImpl()));

     

     

    其他代碼就跟以前的服務器代碼一樣了。

    完整的服務器代碼如下:

    TMultiplexedProcessor processor = newTMultiplexedProcessor();

              

               TServerTransport t = new TServerSocket(9090);

               TServer server = new TThreadPoolServer(newTThreadPoolServer.Args(t).processor(processor));

              

               processor.registerProcessor("TopicService"newTopicService.Processor<TopicService.Iface>(newTopicImpl()));

               processor.registerProcessor("UserService"newUserService.Processor<UserService.Iface>(newUserImpl()));

              

    //         TSimpleServer server = new TSimpleServer(new Args(t).processor(processor));

     

               System.out.println("the serveris started and is listening at 9090...");

              

            server.serve();

     

     

    最后是客戶端代碼了,客戶端代碼的不同之處是引入了“TMultiplexedProtocol”類,它來幫助客戶端區別調用哪個接口:

    TMultiplexedProtocol mp1 = new TMultiplexedProtocol(protocol,"TopicService");

                               

        TopicService.Clientservice1 = new TopicService.Client(mp1);

     

    完整的客戶端測試代碼如下:

                  TSocket transport = new TSocket("localhost",9090);

                 

                  TBinaryProtocol protocol = new TBinaryProtocol(transport);

                 

                  TMultiplexedProtocolmp1 = new TMultiplexedProtocol(protocol,"TopicService");

                 

                  TopicService.Client service1 = newTopicService.Client(mp1);

                 

                  TMultiplexedProtocolmp2 = new TMultiplexedProtocol(protocol,"UserService");

                 

                  UserService.Client service2 = newUserService.Client(mp2);

                 

                  transport.open();

                 

                  service1.store(new Topic(668,"test topic","just a test!"));

                 

                  service2.store1(new User(888,"tom","haha"));

                 

                  System.out.println(service1.retrieve(168));

                  System.out.println(service2.retrieve1(999));

                 

               transport.close();

     

     

    運行服務器代碼和客戶端代碼,則客戶端會打印如下結果:

    Topic(uid:168, name:test, content:test)

    User(uid:999, name:tom, blurb:123)

     

     

    服務器端會打印如下的信息:

    the server is started and is listening at 9090...

    the input topic:

    id: 668

    name: test topic

    content: just a test!

    the input user:

    uid: 888

    name: tom

    blur: haha

    the input uid: 168

    the input uid: 999

     

    通過上面的例子,可以看到,Thrift-0.9.1版本很簡單的解決了多接口服務的問題,隨便說一下,該版本并沒有解決所有語言的多接口實現問題,只是解決了Java和其他幾個語言。請大家在使用的時候,查清楚您使用的語言是否解決了這個問題。

    posted @ 2015-03-18 17:22 小馬歌 閱讀(434) | 評論 (0)編輯 收藏
     

    一、開啟nginx的監控

    1)、nginx簡單狀態監控

    在nginx.conf中添加如下代碼即可監控nginx當前的狀態,然后訪問http://serverip/status即可訪問

    location /status {
    stub_status on;
    access_log off;
    }

    一般顯示為

    Active connections: 16 
    server accepts handled requests
    191226 191226 305915 
    Reading: 0 Writing: 1 Waiting: 15

    ctive connections: 對后端發起的活動連接數.

    Server accepts handled requests: Nginx總共處理了24個連接,成功創建24次握手(證明中間沒有失敗的),總共處理了129個請求.

    Reading: Nginx 讀取到客戶端的Header信息數.

    Writing: Nginx 返回給客戶端的Header信息數.

    Waiting: 開啟keep-alive的情況下,這個值等于 active – (reading + writing),意思就是Nginx已經處理完成,正在等候下一次請求指令的駐留連接.
    注意的,本模塊默認是不會編譯進Nginx的,如果你要使用該模塊,則要在編譯安裝Nginx時指定:
     ./configure –with-http_stub_status_module 
     查看已安裝的 Nginx 是否包含 stub_status 模塊
     #/usr/local/nginx/sbin/nginx -V 
     TLS SNI support disabled
    configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-file-aio --with-http_ssl_module 
     
    2)、nginx的圖形化監控-nginx-RRD stats
     
    nginx-rrdnginx官方推薦的一款Nginx監控工具,利用nginx-rrd可以很方便的生成圖表,便于我們查看。

    1、運行環境(centos):

    在安裝前需要安裝好rrdtool這個畫圖工具和相應的perl模塊,可以先運行:

    yum install rrdtool libhtml-parser-perl libwww-perl librrds-perl librrd2-dev

    確保rrdtool和相應的perl被安裝上。

    2、安裝配置

    下載:wget http://soft.vpser.net/status/nginx-rrd/nginx-rrd-0.1.4.tgz

    解壓:tar zxvf nginx-rrd-0.1.4.tgz

    進入nginx-rrd目錄,cd nginx-rrd-0.1.4/

    復制主程序:cp usr/sbin/* /usr/sbin

    復制配置文件cp etc/nginx-rrd.conf /etc

    復制定時執行文件:cp etc/cron.d/nginx-rrd.cron /etc/cron.d

    創建nginx-rrd生成目錄:mkdir /home/wwwroot/nginx && mkdir /home/wwwroot/nginx/rrd

    cp html/index.php /home/wwwroot/nginx

    編輯/home/wwwroot/nginx/index.php修改登錄密碼

    <?php
    header("Content-Type: text/html; charset=utf-8");

    $password = "admin"; 

    .........

    編輯配置文件nginx-rrd.conf,修改完成后如下:

    #####################################################
    #
    # dir where rrd databases are stored
    RRD_DIR="/home/wwwroot/nginx-rrd/";
    # dir where png images are presented
    WWW_DIR="/home/wwwroot/nginx/";
    # process nice level
    NICE_LEVEL="-19";
    # bin dir
    BIN_DIR="/usr/sbin";
    # servers to test
    # server_utl;server_name
    SERVERS_URL="http://127.0.0.1/status;127.0.0.1"

    多個server,可以SERVERS_URL中空格分開,前部分為nginx_status的地址,后面為被監控主機的域名。

    SEVERS_URL 格式

    注意,nginx.conf虛擬主機server{}中,需要已經加入:

    location /status {
    stub_status on;
    access_log off;
    }

    以上設置就完成,可以自行運行一下:/usr/sbin/nginx-collect ,啟動收集程序。cron會15分鐘生成一次數據。

    如果沒有定時執行生成數據,可以在/etc/crontab最后面加上:

    * * * * * root /usr/sbin/nginx-collect
    */15 * * * * root /usr/sbin/nginx-graph

    然后輸入然后訪問http://serverip/nginx/即可訪問。

     

    二、開啟tomcat的監控

    1)、tomcat6的配置

    修改tomcat/conftomcat-users.xml文件中</tomcat-users>節點之前添加如下代碼即可。

     <user username="admin" password="admin" roles="manager"/>

    然后輸入然后訪問http://serverip:8080/manager/status即可訪問。

    2)tomcat7的配置

    修改tomcat/conftomcat-users.xml文件中</tomcat-users>節點之前添加如下代碼即可。

    <role rolename="manager-gui"/>
    <user username="tomcat" admin="admin" roles="manager-gui"/>

    然后輸入然后訪問http://serverip:8080/manager/status即可訪問。

    posted @ 2015-03-17 10:00 小馬歌 閱讀(2418) | 評論 (0)編輯 收藏
    僅列出標題
    共95頁: First 上一頁 11 12 13 14 15 16 17 18 19 下一頁 Last 
     
    主站蜘蛛池模板: 114级毛片免费观看| 国产gv天堂亚洲国产gv刚刚碰| 久久精品成人免费国产片小草| 亚洲fuli在线观看| 亚洲精品乱码久久久久久久久久久久| 日本免费的一级v一片| 67194成手机免费观看| 中文字幕无码免费久久| 特黄特色的大片观看免费视频| 亚洲综合激情五月色一区| 亚洲大成色www永久网站| 国产精品自在自线免费观看| 成年女人毛片免费观看97| 亚欧免费无码aⅴ在线观看| 中文字幕在线免费视频| 曰批免费视频播放在线看片二 | 亚洲大码熟女在线观看| 亚洲不卡1卡2卡三卡2021麻豆| 久久精品国产精品亚洲艾| 67pao强力打造高清免费| 色www永久免费网站| 一级白嫩美女毛片免费| 美女被爆羞羞网站免费| 日日摸日日碰夜夜爽亚洲| 亚洲精品无码专区久久| 亚洲色偷偷综合亚洲av78| 亚洲视频无码高清在线| 在线观看日本亚洲一区| 亚洲天堂男人影院| 亚洲中文字幕一区精品自拍| 亚洲欧美日韩中文字幕一区二区三区 | 国产aⅴ无码专区亚洲av麻豆| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产特级淫片免费看| 免费观看a级毛片| 国产高清视频在线免费观看| 国产成人精品免费直播| 免费人成在线观看视频播放 | 国产成人无码免费看片软件| 国产免费福利体检区久久| 中文字幕久无码免费久久|