国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

GIT的使用

2024-06-28 13:25:11
字體:
來源:轉載
供稿:網友
GIT的使用GIT 的常規操作

常規操作也是我自己平時常用的幾個命令, 學自于 PRo git 這本書中

git 配置文件
  1. git的配置文件位置 針對所有用戶:/etc/gitconfig 針對當前用戶: ~/.gitconfig

  2. 查看配置的方法

    git config --list
  3. 修改配置的方法

    git config --global user.name "wangyubin"  (修改的是~/.gitconfig)git config --system user.name "wangyubin"  (修改的是/etc/gitconfig)
git 基本使用
  1. clone現有倉庫

    git clone URL  (URL支持git,ssh,http,https等各種協議)
  2. git中文件的各個狀態

    • unstaged - git倉庫中沒有此文件的相關記錄
    • modified - git倉庫中有這個文件的記錄,并且此文件當前有改動
    • staged - 追加,刪除或修改的文件被暫時保存,這些追加,刪除和修改并沒有提交到git倉庫
    • commited - 追加或修改的文件被提交到本地git倉庫(git倉庫中大部分都是這種文件,所以git status不顯示這些文件)
  3. 查看git倉庫中各文件狀態

    git status
  4. 初始化一個倉庫

    git init

    在當前文件夾下生成.git目錄,完成初始化,此時此文件夾下的所有文件處于unstaged狀態

  5. 追加文件

    git add test.c

    test.c的文件變為staged狀態,其他文件還是unstaged狀態

    5.1 追加文件的結果1 - 恢復為原先狀態(變為unstaged)

    git rm --cache test.c

    5.2 追加文件的結果2 - 提交到git倉庫(變為commited)

    git commit -m "my message"
  6. 修改文件

    echo "aaa"  >> test.c

    test.c的狀態變為modified

    6.1 修改文件的結果1

    git add test.c  (暫時保存修改的內容,即變為staged)

    下面有2條路可以選擇: 6.1.1 取消剛才的暫時保存

    git reset test.c  (狀態變回modified)

    6.2.2 將暫存的修改提交到git倉庫

    git commit -m "my message"

    6.2 修改文件的結果2

    git checkout test.c  (將test.c恢復為git倉庫中的最新版本,即變為commited狀態,test.c的內容和5.2節一樣)
  7. 刪除文件 7.1 從git倉庫和磁盤上刪除文件

    git rm test.c  (當前目錄中刪除了test.c,在git倉庫中暫時刪除了test.c,相當于staged狀態)

    7.1.1 從git倉庫中刪除test.c

    git commit -m "my message"  (git倉庫以后不再維護test.c)

    7.1.2 刪錯了,恢復剛才的操作

    git reset HEAD test.c  (恢復到刪除前的狀態,當前目錄中已刪除的test.c也恢復了,test.c仍文commited狀態)

    7.2 僅從git倉庫中刪除文件

    git rm --cache test.c (當前目錄中沒有刪除了test.c,僅在git倉庫中暫時刪除了test.c,相當于staged狀態)

    7.2.1 從git倉庫中刪除test.c

    git commit -m "my message"  (git倉庫以后不再維護test.c,但是當前目錄中仍然有test.c)

    7.2.2 刪錯了,恢復剛才的操作

    git reset HEAD test.c  (和7.1.2一樣)

    7.3 誤刪除后的恢復如果刪除了一個文件,并且commit之后發現刪錯了。也可以恢復,

    git log  (查看各次的提交信息)git checkout commit號  (恢復到未刪除前的commint號,此時刪除的文件也恢復到磁盤上了)git checkout master  (備份好刪除的文件后,再回到最新狀態)
git 遠程倉庫
  1. 查看遠程倉庫 1.1 簡單查看-所有倉庫

    git remote (只能查看遠程倉庫的名字)

    1.2 查看更多內容-所有倉庫

    git remote -v (遠程倉庫的名字及git地址)

    1.3 查看單個倉庫的信息

    git remote show [remote-name]
  2. 新建遠程倉庫

    git remote add [shortname] [url]ex. git remote add mc git://www.host.com/gitdir/mycode.git
  3. 修改遠程倉庫

    git remote rename [oldnanme] [newname]
  4. 刪除遠程倉庫

    git remote rm [remote-name]
  5. 遠程倉庫的數據 5.1 獲取數據

    git fetch [remote-name] (獲取倉庫的所有更新,但是不自動合并當前分支)git pull (獲取倉庫的所有更新, 并且自動合并到當前分支)

    5.2 上傳數據

    git push [remote-name] [branch-name]ex. git push origin master
git 標簽
  1. 列出標簽 1.1 查看所有tag

    git tag

    1.2 查看某個tag

    git show [tag-name]
  2. 新建標簽 2.1 輕量級tag

    git tag [tag-name]

    2.2 帶標注的tag

    git tag -a [tag-name] -m "tag message"

    2.3 后期追加tag

    git log --pretty=oneline (查看所有的commit號)git tag -a [tag-name] [commit號前幾位即可]
  3. 刪除標簽

    git tag -d [tag-name]
  4. 提交標簽到遠程倉庫

    git push [remote-name] --tagsex. git push origin --tags
git 分支
  1. 查看和切換分支

    git branch (查看所有的分支及當前處于哪個分支)git branch -v (查看所有的分支的詳細信息)git branch --merged (查看已經合并的分支)git branch --no-merged (查看還沒合并的分支)git checkout [branch-name] (切換到某個分支)
  2. 新建分支

    git branch [branch-name]  (新建一個分支)git branch -b [branch-name] (新建一個分支并切換到這個分支上)
  3. 合并分支

    git merge [branch-name]ex. 將分支btest合并到主分支mastergit checkout mastergit merge btest

    merge時有沖突的文件會列出來,需要手動合并

    將沖突手動解決后,再次用 git status來查看是否還有 unmerged的文件。如果沒有沖突的文件,就可以 git commit 來提交這次合并了。

  4. 刪除分支

    git branch -d [branch-name]或者 git branch -D [branch-name] (強制刪除某個還未合并的分支)
  5. 遠程分支相關 5.1 新建遠程分支

    1. git checkout [local_branch] (首先進入想要上傳的分支)
    2. git remote add [remote_repo] [remote_branch] (這里的[remote_branch]是遠程分支的名字,一般和[local_branch]同名, [remote_repo]是遠程倉庫的名字)

    3. 2 向遠程分支推送數據

      git push [remote_repo] [remote_branch]

    4. 3 刪除遠程分支

      git push [remote_repo] :[remote_branch] (注意遠程分支前有個":")

  6. 合并分支的另一個方法:衍和

衍和可以簡化master上的提交記錄,使得代碼可以方便的回退,但是在公共倉庫上用衍和有一定的風險。衍和我基本用不上,這里就不贅述了。

服務器創建 git 倉庫, 并將其作為遠程倉庫

其實 git 是分布式的 SCM. 并不存在誰是服務器, 誰是客戶端的問題, 這里所說的服務器上的git倉庫, 指的是多人合作開發時, 共用的, 作為最終發布版本的 git 倉庫.這個 git 倉庫就相當于你在 github 上建的倉庫, 會將你在各個電腦上做的代碼等提交到上面進行統一管理.

  1. 服務端 (遠程 git 倉庫)

    • 生成用于git服務的賬戶 (一般就用git)

      groupadd gpxxxuseradd -m -g gpxxx gitxxx
    • 初始化服務端的git 倉庫

      cd ~/mkdir git-repocd git-repomkdir test.gitcd test.gitgit --bare init
  2. 客戶端 (本地 git 倉庫)

    • 新建本地git 倉庫

      cd ~/gitlocalmkdir testcd testgit init
    • 初始化本地倉庫

      touch READMEgit add READMEgit commit -m 'first commit for init'
    • 設置git用戶信息

      git config --global user.name "wangyubin"git config --global user.email "xxx@xxx.com"
    • 關聯遠程倉庫

      git remote add origin gituser@<server address>:~/test.git/
    • 將本地倉庫提交到遠程

      git push origin master
git 使用中遇到的一些問題git pull 時, 遠程文件與本地文件有沖突

如果遠程的倉庫被其他人更新了, 并且更新的內容與我自己本地編輯的內容有沖突. 這時執行 git pull 可能有如下message:

Auto-merging path/to/conflict-fileCONFLICT (content): Merge conflict in path/to/conflict-fileAutomatic merge failed; fix conflicts and then commit the result.

用文本編輯器 vim 或者 emacs 之類的來編輯沖突的文件 path/to/conflict-file, 沖突的地方有類似如下的顯示

<<<<<<< HEAD    App_Log.logger.debug(u'開始時間: ' + utils.datetime2str(datetime.datetime.now()))    file = request.FILES.get('file-xxx')    App_Log.logger.debug(u'結束時間: ' + utils.datetime2str(datetime.datetime.now()))=======    file = request.FILES.get('xxxx')>>>>>>> 3602514cc2bf1b3a64470b31ad79e07fe372add5

===== 之上的 <<<<<<< HEAD 是本地的內容===== 之下的 >>>>>>> 3602514cc2bf1b3a64470b31ad79e07fe372add5 是遠程的內容(這個commit號每次都會不同)根據實際情況, 刪除多余的內容(包括===== >>>>> <<<<<< 之類的), 修改沖突的地方, 如果以本地的代碼為準的話, 會得到如下結果:

App_Log.logger.debug(u'開始時間: ' + utils.datetime2str(datetime.datetime.now()))file = request.FILES.get('file-xxx')App_Log.logger.debug(u'結束時間: ' + utils.datetime2str(datetime.datetime.now()))

然后 git commit -am '提交的信息' 就解決了沖突.最后, 也可以將本地的修改同步到遠程 git 倉庫: git push

git pull 時, 本地還有未commit 的文件

從遠程倉庫更新時, 假使本地還有沒commit的文件A, 遠程倉庫的A文件卻被修改了. 此時進行 git pull 時有如下信息:

6a707cc..f93575d  master     -> origin/masterUpdating 6a707cc..f93575derror: Your local changes to the following files would be overwritten by merge:    apps/myapp/utils.pyPlease, commit your changes or stash them before you can merge.Aborting

此時, 如果不想將本地文件commit(可能只是臨時的修改), 但是又像將遠程的倉庫更新下來, 可以這樣:

$ git stash    # 先將自己的改變保存起來Saved working directory and index state Wip on master: 6a707cc ...HEAD is now at 6a707cc ...$ git pull     # 從遠程倉庫更新Updating 6a707cc..f93575d... ...$ git stash pop   # 將自己的修改合并到更新后的代碼中

最后一步如果有沖突, 再參照上一節中解決沖突的步驟, 用文本編輯器修改沖突文件.

git 分支合并時的沖突

正在開發的分支和主分支的編輯了同一個文件時, 在主分支上進行 merge 的時候可能會產生沖突.以下構造一個沖突的示例:

$ git branch test  # 創建一個分支 test, 但是沒有進入test分支, 此時還在 master 分支上.$ vim xxxx         # 編輯 master 分支上的一個已有的文件$ git commit -am 'xxx message'  # 提交 master 分支的修改$ git checkout test    # 切換到 test 分支$ vim xxxx             # 編輯之前在 master 上編輯的文件, 可以編輯同一個地方, 造成沖突$ git commit -am 'xxx message'  # 提交 test 分支的修改$ git checkout master           # 切換到 master 分支$ git merge test                # 將 test 分支合并到 master 分支, 由于上面編輯了同一文件, 這里會產生沖突Auto-merging xxxxCONFLICT (content): Merge conflict in xxxxAutomatic merge failed; fix conflicts and then commit the result.

最后, 參照上一節中解決沖突的步驟, 用文本編輯器修改沖突文件.

通過 git 提取補丁

提取的補丁的方法有多種:

$ git format-patch -1     # 提取本次 commit 和上次 commit 之間的不同, 并生成patch文件$ git format-patch -2     # 提取本次 commit 和 上上次 commit 之間的不同, 并生成patch文件$ git format-patch commit號1 commit號2  # 提取2次commit號之間的不同, 并生成patch文件 (commit號可以通過 git log 來查看)$ git format-patch tag1 tag2            # 提取2次tag之間的不同, 并生成patch文件 (tag可以通過 git tag 來查看)
通過 git 提取指定版本的源碼

這個功能在部署的時候比較有用.

$ git archive --format=tar --prefix="tagxx/" tagxx > ../tagxx.tar  # 獲取 tagxx 的源碼, 加了 --prefix 的作用是在最終的 tagxx.tar 中加了一層文件夾 tagxx

上面的 tagxx 也可以是 commit號


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 雅江县| 周口市| 铁岭市| 阳泉市| 长葛市| 西昌市| 郧西县| 高尔夫| 大田县| 稻城县| 南皮县| 曲松县| 休宁县| 北宁市| 泸定县| 上饶县| 尉氏县| 北安市| 祁连县| 西昌市| 黎城县| 安远县| 和平区| 怀宁县| 永寿县| 清水河县| 宜都市| 冕宁县| 米林县| 广德县| 革吉县| 洪江市| 安陆市| 尤溪县| 阿拉善盟| 香格里拉县| 南和县| 康保县| 肇源县| 江门市| 江门市|