git命令部署服務和客戶端

安裝git:  
yum install git  
版本git:
git --version  
卸載git:
yum remove git 

git config --global user.name "username"
git config --global user.email [email protected]

======================================================================================================
裸庫部署:
部署例子:服務器域名:    www.testdev.com.cn
服務器:    
    cd /home
    git init --bare web.git
    chown -R git:nginx web.git
    chmod -R 775 web.git
客戶端:    
    git clone  git@IP:/home/web.git msy
    輸入git密碼        git_password

    git clone git@ip:/home/web.git web_weiya

    現在地址下載應該是:
    git clone ssh://git@IP:65123/home/web.git

    輸入git密碼        git_password
======================================================================================================
git remote set-url origin ssh://git@IP:65123/home/web.git
======================================================================================================
git remote remove msy_origin
git remote add msy_origin https://github.com/testname/msy.git
git push -u msy_origin master:master

git remote remove weiya_origin
git remote add weiya_origin https://github.com/testname/weiya.git
git push -u weiya_origin master:master

git clone https://github.com/testname/msy.git]
git clone https://github.com/testname/weiya.git

git branch --set-upstream-to=origin/<branch> master 
示例:    git branch --set-upstream-to=origin/master 
======================================================================================================
獲取遠程分支:
# git checkout -b xxx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
刪除遠程分支:
1 git push 遠程庫 --delete 遠程分支
2 git fetch -p
======================================================================================================
忽略已跟蹤的文件
git update-index --assume-unchanged  msy/Application/Admin/Conf/menu_conf.php

撤銷-忽略已跟蹤的文件:
git update-index --no-assume-unchanged  msy/Application/Admin/Conf/menu_conf.php

刪除已追蹤的文件夾或文件夾:
1 git rm -r --cached .idea/    #保留本地
2 git rm -r .idea/    #不保留本地
3 git commit -m 'x'
4 git push ...

規則很簡單,不做過多解釋,但是有時候在項目開發過程中,突然心血來潮想把某些目錄或文件加入忽略規則,按照上述方法定義後發現並未生效,
原因是.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。那麼解決方法就是先把本地緩存刪除(改變成未track狀態),然後再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

http://blog.csdn.net/fuchaosz/article/details/52170105
======================================================================================================
.gitignore:

空行或是以#開頭的行即註釋行將被忽略;
以斜槓 “/” 結尾表示目錄;
以星號 “*” 通配多個字符;
以問號 “?” 通配單個字符;
以方括號 “[]” 包含單個字符的匹配列表;
以歎號 “!” 表示不忽略(跟蹤)匹配到的文件或目錄;
可以在前面添加斜槓 “/” 來避免遞歸,下面的例子中可以很明白的看出來與下一條的區別。

示例:

# 忽略 .a 文件
*.a

# 但否定忽略 lib.a, 儘管已經在前面忽略了 .a 文件
!lib.a

# 僅在當前目錄下忽略 TODO 文件, 但不包括子目錄下的 subdir/TODO
/TODO

# 忽略 build/ 文件夾下的所有文件
build/

# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt

# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
======================================================================================================
自動推送(hooks)設置:
裸庫下的hooks目錄,例如:/home/web.git/hooks
vim post-receive
輸入:
#!/bin/bash
git --work-tree=/yjdata/www/www/web checkout -f
保存退出
chmod u+x post-receive
chown git:nginx post-receive
======================================================================================================
小結:

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file | *

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。(git reset --hard 文件或者版本ID)
git reset --hard 的誤操作的解決辦法
git reflog
git reset --hard 版本

自己的遠程分支版本回退的方法

如果你的錯誤提交已經推送到自己的遠程分支了,那麼就需要回滾遠程分支了。 
首先要回退本地分支:

git reflog
git reset --hard f07e7ba

緊接着強制推送到遠程分支:

git push -f

注意:本地分支回滾後,版本將落後遠程分支,必須使用強制推送覆蓋遠程分支,否則無法推送到遠程分支
======================================================================================================
# 添加指定文件到暫存區
$ git add [file1] [file2] ...

# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]

# 添加當前目錄的所有文件到暫存區
$ git add .

# 添加每個變化前,都會要求確認
# 對於同一個文件的多處變化,可以實現分次提交
$ git add -p

# 刪除工作區文件,並且將這次刪除放入暫存區
$ git rm [file1] [file2] ...

# 停止追蹤指定文件,但該文件會保留在工作區
$ git rm --cached [file]

# 改名文件,並且將這個改名放入暫存區
$ git mv [file-original] [file-renamed]
四、代碼提交

# 提交暫存區到倉庫區
$ git commit -m [message]

# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]

# 提交工作區自上次commit之後的變化,直接到倉庫區
$ git commit -a

# 提交時顯示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,幷包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
五、分支

# 列出所有本地分支
$ git branch

# 列出所有遠程分支
$ git branch -r

# 列出所有本地分支和遠程分支
$ git branch -a

# 新建一個分支,但依然停留在當前分支
$ git branch [branch-name]

# 新建一個分支,並切換到該分支
$ git checkout -b [branch]

# 新建一個分支,指向指定commit
$ git branch [branch] [commit]

# 新建一個分支,與指定的遠程分支建立追蹤關係
$ git branch --track [branch] [remote-branch]

# 切換到指定分支,並更新工作區
$ git checkout [branch-name]

# 切換到上一個分支
$ git checkout -

# 建立追蹤關係,在現有分支與指定的遠程分支之間
$ git branch --set-upstream [branch] [remote-branch]

# 合併指定分支到當前分支
$ git merge [branch]

# 選擇一個commit,合併進當前分支
$ git cherry-pick [commit]

# 刪除分支
$ git branch -d [branch-name]

# 刪除遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]    例如:git branch -dr origin/zm

# 恢復暫存區的指定文件到工作區
$ git checkout [file]

# 恢復某個commit的指定文件到暫存區和工作區
$ git checkout [commit] [file]

# 恢復暫存區的所有文件到工作區
$ git checkout .

# 重置暫存區的指定文件,與上一次commit保持一致,但工作區不變
$ git reset [file]

# 重置暫存區與工作區,與上一次commit保持一致
$ git reset --hard

# 重置當前分支的指針爲指定commit,同時重置暫存區,但工作區不變
$ git reset [commit]

# 重置當前分支的HEAD爲指定commit,同時重置暫存區和工作區,與指定commit一致
$ git reset --hard [commit]

# 重置當前HEAD爲指定commit,但保持暫存區和工作區不變
$ git reset --keep [commit]

# 新建一個commit,用來撤銷指定commit
# 後者的所有變化都將被前者抵消,並且應用到當前分支
$ git revert [commit]

# 暫時將未提交的變化移除,稍後再移入
$ git stash
$ git stash pop
======================================================================================================
常見問題:
一、解決git push/git clone代碼速度太慢:
1.使用管理員權限打開hosts文件
sudo vim /etc/hosts
2.在該文件末尾空一行填入
151.101.72.249 github.global.ssl.fastly.net
修改之後速度由10k20k左右增到500k-1000k左右
-------------------------------------------------------------------------------------------------------
二、檢出大項目報錯,curl的postBuffer默認值太小:
如果項目比較複雜龐大,檢出會出現這個錯誤,就是因爲curl的postBuffer默認值太小的原因,重新在終端配置一下這個值就可以:
git config --global http.postBuffer 1048576000 (這個值是kb 1G,根據具體項目大小修改)
--global配置對當前用戶生效,如果需要對所有用戶生效,則用--system
然後檢查一下是否配置成功:
git config --list

發佈了38 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章