天天看點

github

1.git的安裝

sudo apt-get install git

2.自報家門

git config --global user.name "yuzhiwei"

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

3.建立版本庫,也就是倉庫

建立空目錄:

mkdir mygit

cd mygit

初始化,把目錄變成git可以管理的倉庫:

git init

把檔案添加到版本庫:

vi readme.txt       在mygit下放入一個檔案,例如readme.txt

git add readme.txt  把檔案添加到倉庫

git commit -m "wrote a readme file"    把檔案送出到倉庫,-m "說明文"

4.檢視

檢視倉庫目前狀态:

git status

檢視具體修改詳情:

git diff readme.txt

把檔案送出到倉庫:

git add readme.txt

git commit -m "add haha"

5.版本回退

git log

如果想減少看到的東西,隻看到——檔案的版本+寫的說明文:

git log --pretty=oneline

在git中,head表示目前版本,head^表示上一個版本,head^^表示上上個版本,head~100往上100個版本:

git reset --hard head^

想要回到後面的版本中,隻要上面的指令視窗沒關:

git reset --hard 版本号的部分或全部

檢視輸入指令曆史記錄:

git reflog

6.工作區和暫存區

mygit目錄就是一個工作區。.git隐藏目錄是版本庫,其中stage或index暫存區。

git為我們建立的第一個分支master,指向master的指針head。

git add把檔案添加到暫存區,git commit把暫存區對應檔案添加到目前分支。

git diff head -- readme.txt可以檢視工作區和版本庫裡面最新版本的差別。

7.撤銷修改

git checkout -- file可以撤銷最近一個git commit 或git add時的狀态。

一種是file自修改後還沒有被放到暫存區,一種是已經添加到暫存區,并又在工作區修改了。

git reset head file可以把暫存區的修改撤銷掉,重新放回工作區。

8.删除檔案

删除工作區檔案後:

可以删除版本庫中的檔案:git rm readme.txt  然後   git commit -m "remove readme.txt"

可以撤銷誤删,恢複檔案:git checkout -- readme.txt

9.遠端倉庫

注冊github賬戶,然後如果root目錄下沒有.ssh目錄,目錄裡沒有id_rsa檔案、id_rsa.pub檔案,就:

ssh-keygen -t rsa -c "[email protected]"

登陸github,在settings裡ssh keys頁面,點“add ssh key”,填任意title,指派id_rsa.pub内容到key文本框。

10.添加遠端庫

create a new repo,然後# git remote add origin [email protected]:zhiweiyu/mygithub.git

# git push -u origin master

以後每次送出東西到分支後,就輸入# git push origin master

11.從遠端克隆

# git clone [email protected]:zhiweiyu/yuzhiwei.git

12.分支管理

檢視分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合并某分支到目前分支:git merge <name>

删除分支:git branch -d <name>

13.解決沖突

如果兩個分支都對同一個檔案修改過了,那麼合并就可能出問題。

可以直接檢視本分支的檔案内容,發現沖突的内容。對其修改,然後送出commit,最後合并。

用git log檢視分支合并情況:# git log --graph --pretty=oneline --abbrev-commit

14.分支管理政策

--no-ff方式的git merge:

# git merge --no-ff -m "ok" dev

15.bug分支

# git stash将目前工作現場“儲藏”起來。

# git stash list檢視剛才的工作現場

最後,恢複現場:git stash apply stash@{0} ,恢複後stash内容不删除。需要用git stash drop來删除

git stash pop來删除,恢複同時把stash内容也删除了。

16.合并之前删除分支

強制删除:git branch -d dev

17.多人協作

檢視遠端庫的資訊:

# git remote

# git remote -v

推送分支:git push origin dev  其中dev是本地分支

是以,多人協作的工作模式通常是這樣:

    首先,可以試圖用git push origin branch-name推送自己的修改;

    如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合并;

    如果合并有沖突,則解決沖突,并在本地送出;

    沒有沖突或者解決掉沖突後,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,則說明本地分支和遠端分支的連結關系沒有建立,用指令git branch --set-upstream branch-name origin/branch-name。

這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

18.建立标簽

# git tag v1.0

# git tag

預設标簽是打在最新送出的commit上的。有時候,如果忘了打标簽,比如,現在已經是周五了,但應該在周一打的标簽沒有打,怎麼辦?

方法是找到曆史送出的commit id,然後打上就可以了:

# git log --pretty=oneline --abbrev-commit

root@ubuntu:/home/yu/desktop/mygit/yuzhiwei# git tag v1.1 85a74d9

root@ubuntu:/home/yu/desktop/mygit/yuzhiwei# git tag

v1.0

v1.1

root@ubuntu:/home/yu/desktop/mygit/yuzhiwei#

檢視标簽資訊# git show v1.1

還可以建立帶說明的标簽:# git tag -a v1.2 -m "version 1.2 released" 85a74d922aaa

19.操作标簽

推送标簽:

# git push origin v1.3

# git push origin --tags

如果标簽已經推送到遠端,要删除遠端标簽就麻煩一點,先從本地删除:

# git tag -d v1.3

然後,從遠端删除。删除指令也是push,但是格式如下:

# git push origin :refs/tags/v1.3

20.使用github

如何參與一個開源項目呢?比如人氣極高的bootstrap項目,這是一個非常強大的css架構,你可以通路它的項目首頁https://github.com/twbs/bootstrap,點“fork”就在自己的賬号下克隆了一個bootstrap倉庫,然後,從自己的賬号下clone:

i# git clone [email protected]:zhiweiyu/bootstrap.git

是git顯示顔色:# git config --global color.ui true

21.忽略特殊檔案

在git工作區的根目錄下建立一個特殊的.gitignore檔案,如:

忽略windows自動産生的檔案,忽略python編譯産生的.pyc、.pyo、dist等檔案或目錄,加上自定義檔案,

.gitignore檔案内容如下:

# windows:

thumbs.db

ehthumbs.db

desktop.ini

# python:

*.py[cod]

*.so

*.egg

*.egg-info

dist

build

# my configurations:

db.ini

deploy_key_rsa

執行個體:

# vi .gitignore

# git add .gitignore 

# git commit -m "ignore"

# git push origin master

22.配置别名

status的别名是st : # git config --global alias.st status

顯示最後一次送出資訊:# git log -1  這裡是yi,不是小寫的l

檢視的比較詳細的合并資訊等:

# git log --color --graph --pretty=format:'%cred%h%creset -%c(yellow)%d%creset %s %cgreen(%cr) %c(bold blue)<%an>%creset' --abbrev-commit

每個倉庫的git配置檔案都放在.git/config檔案中

使用cat .git/config檢視,别名就在[alias]後面,要删除别名,直接把對應的行删掉即可。

而目前使用者的git配置檔案放在使用者主目錄下的一個隐藏檔案.gitconfig中:

配置别名也可以直接修改這個檔案,如果改錯了,可以删掉檔案重新通過指令配置。

23.搭建git伺服器

(1)sudo apt-get install git

(2)sudo adduser git

(3)收集所有需要登入的使用者的公鑰,就是他們自己的id_rsa.pub檔案,把所有公鑰導入到/home/git/.ssh/authorized_keys檔案裡,一行一個。

(4)先標明一個目錄作為git倉庫,假定是/srv/sample.git,在/srv目錄下輸入指令:sudo git init --bare sample.git

(5)git就會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的git倉庫純粹是為了共享,是以不讓使用者直接登入到伺服器上去改工作區,并且伺服器上的git倉庫通常都以.git結尾。然後,把owner改為git:

sudo chown -r git:git sample.git

(6)第五步,禁用shell登入:

出于安全考慮,第二步建立的git使用者不允許登入shell,這可以通過編輯/etc/passwd檔案完成。

git:x:1001:1001:,,,:/home/git:/bin/bash

改為:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

第六步,克隆遠端倉庫:

現在,可以通過git clone指令克隆遠端倉庫了,在各自的電腦上運作:

#git clone git@server:/srv/sample.git

剩下的推送就簡單了。