git 實作練習 4

@ver 0.1.2 @date 2019-04-17 07:10:41 (星期三)

@ver 0.1.1 @date 2019-04-13 08:13:22 (星期六)

  1. 建立者 : 遠端倉庫

### 建立本機的建立遠端倉庫並初始化

重要 只要執行一次.

我們把遠端倉庫放在 /home/repo 目錄名稱不重要, 用 root 建立, 並設定共同開發者群組權限.

#### 命令 bash sudo -i cd /home mkdir repo cd repo git init --bare ls -la

#### 執行結果及說明 shell # 以 root 身份 # 到 /home 子目錄, 或任何目錄皆可 root@nvda:~# cd /home # 建立遠端倉庫子目錄, 名為 `repo` root@nvda:/home# mkdir repo # 進入子目錄 root@nvda:/home# cd repo # 遠端倉庫初始化 root@nvda:/home/repo# git init --bare Initialized empty Git repository in /home/repo/ # 查看 root@nvda:/home/repo# ls -la 總計 40 drwxr-xr-x 7 root root 4096 4月 17 07:27 . drwxr-xr-x 12 root root 4096 4月 17 07:27 .. drwxr-xr-x 2 root root 4096 4月 17 07:27 branches -rw-r--r-- 1 root root 66 4月 17 07:27 config -rw-r--r-- 1 root root 73 4月 17 07:27 description -rw-r--r-- 1 root root 23 4月 17 07:27 HEAD drwxr-xr-x 2 root root 4096 4月 17 07:27 hooks drwxr-xr-x 2 root root 4096 4月 17 07:27 info drwxr-xr-x 4 root root 4096 4月 17 07:27 objects drwxr-xr-x 4 root root 4096 4月 17 07:27 refs root@nvda:/home/repo#

### 共同開發者們, 權限可讀寫

重要 : 因為每個共同開發者, 都要把程式碼寫回到這裡. 修改檔案目錄的群組及權限為 admin group 及 770 可寫入,

#### 命令 bash cd /home chown -fR root:admin repo/ chmod -fR g+w o-r o-x repo/ chmod 770 repo/ ls -ld repo/ ls -la repo/

#### 執行結果及說明 ```shell # 返回 /home root@nvda:/home/repo# cd /home

# 修改遠端倉庫目錄及檔案的群組為 admin root@nvda:/home# chown -fR root:admin repo/

# 修改遠端倉庫目錄及檔案的群組可寫入權限, 其他人為無權限 root@nvda:/home# chmod -fR g+w o-r o-x repo/ root@nvda:/home# chmod 770 repo/

# 查看母目錄, 群組正確否? 可寫入權限正確否? root@nvda:/home# ls -ld repo/ drwxrwx--- 7 root admin 4096 4月 17 09:58 repo/

# 查看子目錄, 群組正確否? 可寫入權限正確否? root@nvda:/home# ls -la repo/ 總計 40 drwxrwx--- 7 root admin 4096 4月 17 09:58 . drwxr-xr-x 13 root root 4096 4月 17 09:57 .. drwxrwxr-x 2 root admin 4096 4月 17 09:58 branches -rw-rw-r-- 1 root admin 66 4月 17 09:58 config -rw-rw-r-- 1 root admin 73 4月 17 09:58 description -rw-rw-r-- 1 root admin 23 4月 17 09:58 HEAD drwxrwxr-x 2 root admin 4096 4月 17 09:58 hooks drwxrwxr-x 2 root admin 4096 4月 17 09:58 info drwxrwxr-x 4 root admin 4096 4月 17 09:58 objects drwxrwxr-x 4 root admin 4096 4月 17 09:58 refs root@nvda:/home#

# 統計 repo 有 9 個目錄, 14 個檔案 root@nvda:/home# tree -f repo/ ...(略) 9 directories, 14 files

# 統計總 Bytes 為 56630 root@nvda:/home# du -cshb repo/ 56630 repo/ 56630 總計 root@nvda:/home# ```

  1. 建立者 : laravel 基礎框架

### 基礎框架

重要 也是只要執行一次

回到建立者的身份及家目錄, 我們從頭開始建立一個新的 laravel 專案, 暫時先叫做 prj0, 名稱不重要, 這只會當作基礎起點框架上傳到遠端倉庫.

後續此所有共同開發者, 都將會在每個人各自家目錄 clone 回來的專案目錄裡修改操作.

### 建立全新 laravel 專案

建立遠端倉庫用的 laravel 基礎框架時, 先不處理資料庫設定, 但之後各自要把它完成. 每位開發者可以有各自開發用資料庫, 公用測試版也有它的資料庫. 當然, 網站正式上線一定會有正式版專用的資料庫.

同時也不處理 .envvendor 的 composer 安裝, 這些檔案都被禁止或者不需要上傳至遠端倉庫, 前者是安全問題, 後者是跟隨原開發者會有經常性變動. 詳細可查閱 .gitignore 檔案.

#### 命令及說明 ```shell [alex@nvda ~ ]$ laravel new prj0 # 等待約 60 秒 ... 完成 [alex@nvda ~ ]$ cd prj0/ [alex@nvda ~/prj0 ]$ php artisan -V # 版本 Laravel Framework 5.8.12

# 修改系統基礎設定 [alex@nvda ~/prj0 ]$ vi config/app.php # 時間 timezone 預設 UTC, 改為 Asia/Taipei # 本地化 locale 預設 en, 改為 zh-TW # (可不用修改) 另外有一個 'fallback_locale' => 'en', 這個是指如果 'zh-TW' 找不到的話, 它要找誰的語言來替代顯示, 因為所有各種版本都一定有英文對應文字, 所以就用 'en' 即可, 改成 'zh-TW' 或其他語言也沒有什麼問題, 只是可能會顯示空白, 也許剛好可以拿來測試未翻譯本地化的文字. ```

### git init 及 commit 基礎框架 shell git init # Initialized empty Git repository in /home/alex/prj0/.git/ git add . # 本地第一次提交 git commit -m '創立遠端倉庫用的 laravel 基礎框架 5.8.12' git log [alex@nvda ~/prj0 ]$ git log 1 commit 281f0cbb70b2b78e0b65643bc889f6b5adbad636 2 Author: alex <alex@forblind.org.tw> 3 Date: Wed Apr 17 07:41:40 2019 +0800 4 5 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex@nvda ~/prj0 ]$

### 重要 : 設定 git 本地倉庫到遠端倉庫的連結

bash git remote add origin 127.0.0.1:/home/repo

### git push 遠端倉庫

第一次 push 會要求 The authenticity of host '127.0.0.1 (127.0.0.1)'... 的授權, 請輸入 yes 即可.

#### 命令 bash git push origin master

#### 執行結果 shell [alex@nvda ~/prj0 ]$ git push origin master The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established. ECDSA key fingerprint is SHA256:kvXp+0IOtRbKfesB+OxXE2WuNlNeE8WmaY32oZIEfGA. Are you sure you want to continue connecting (yes/no)? Counting objects: 116, done. Delta compression using up to 2 threads. Compressing objects: 100% (98/98), done. Writing objects: 100% (116/116), 236.51 KiB | 0 bytes/s, done. Total 116 (delta 9), reused 0 (delta 0) remote: Resolving deltas: 100% (9/9), done. To 127.0.0.1:/home/repo * [new branch] master -> master [alex@nvda ~/prj0 ]$

完成 建置 laravel 基礎框架 5.8.12 並推送到 本機內部的遠端倉庫

#### 遠端倉庫第一次 push 之後, 跟先前原始 bare 時統計比對

```shell # 統計 repo 有 9 個目錄, 17 個檔案 root@nvda:/home# tree -f repo/ ...(略) 9 directories, 17 files

# 統計總 Bytes 為 303173 root@nvda:/home# du -csb repo/ 303173 repo/ 303173 總計 root@nvda:/home# ```

  1. 開發者 : clone 並補齊 laravel 設定

### 把遠端倉庫複製回開發者工作目錄

重要 共同開發者只要操作一次 clone

目前實驗的開發者是 alex2, 但 git author name 設為 ben 便於識別. 先回到自己的家目錄, git clone /home/repo 複製遠端倉庫的程式碼回來

> 補充 : git clone <repository> [<directory>] > > 也就是說, git clone /home/repogit clone /home/repo benPrj 皆可, 而後者更方便, 原先 clone 回來預設目錄名稱, 直接指定為自己想要的新名稱.

#### 命令 bash cd ~ git clone /home/repo ls -ld repo mv repo benPrj # 或者直接指定目錄新名稱 git clone /home/repo benPrj cd benPrj ls -l .env ls -l vendor

#### 執行結果及說明 ```shell # 本機對本機, 只有 303173 Bytes, 所以 clone 會很快, 咻一下就結束 [alex2@nvda ~ ]$ git clone /home/repo Cloning into 'repo'... done.

# 此時會 git 會自動幫我們建立一個名為 repo 子目錄 [alex2@nvda ~ ]$ ls -ld repo drwxr-xr-x 12 alex2 admin 4096 4月 17 07:46 repo/

# 改成自己喜歡的工作目錄名, 或移動到其他自己方便操作的子目錄之下(例如, 個人偏好放在 ~/jobs/ 之下), 都不會影響開發工作 [alex2@nvda ~ ]$ mv repo benPrj [alex2@nvda ~ ]$ cd benPrj/

# git 預設禁止把 .env 檔跟 vendor 目錄放進去追踪, 所以 沒有此一檔案或目錄, 都是正常的 [alex2@nvda ~/benPrj ]$ ls -l .env ls: 無法存取 '.env': 沒有此一檔案或目錄 [alex2@nvda ~/benPrj ]$ ls -l vendor ls: 無法存取 'vendor': 沒有此一檔案或目錄 [alex2@nvda ~/benPrj ]$ ```

首要工作, 就是把 .envvendor/ 目錄裡的套件程式生出來

#### 命令及說明 bash cd ~/benPrj/ composer install cp .env.example .env vi .env php artisan -V

#### 執行結果及說明 ```shell # 進工作目錄 [alex2@nvda ~ ]$ cd ~/benPrj/

# 安裝所有套件 # 要等待一點時間, 讓它把所有套件下載回 vendor/ 子目錄 [alex2@nvda ~/benPrj ]$ composer install Loading composer repositories with package information ...(略) Discovered Package: nunomaduro/collision Package manifest generated successfully. [alex2@nvda ~/benPrj ]$ # .env 從 .env.example 複製再修改 [alex2@nvda ~/benPrj ]$ cp .env.example .env # 修改正確的 mysql ... 等各項設定 [alex2@nvda ~/benPrj ]$ vi .env # 都完成後, 查看現在版本 [alex2@nvda ~/benPrj ]$ php artisan -V Laravel Framework 5.8.12 [alex2@nvda ~/benPrj ]$ ```

### git log 查看

我們可以看到由 Author: alexDate: Wed Apr 17 07:41:40 2019 +0800 創建的 log 資訊

#### 命令 shell git log

#### 執行結果 shell [alex2@nvda ~/benPrj ]$ git log 1 commit 281f0cbb70b2b78e0b65643bc889f6b5adbad636 2 Author: alex <alex@forblind.org.tw> 3 Date: Wed Apr 17 07:41:40 2019 +0800 4 5 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex2@nvda ~/benPrj ]$

### 啟動服務試試

#### 命令 shell php artisan serve --host=nvda --port=2019

進入 瀏覽器 會出現錯誤, 訊息如下:

#### 頁面訊息 plaintext RuntimeException No application encryption key has been specified.

這是因為從遠端倉庫 clone 回來時, key 也是被忽略(.gitignore)的文件之一

### 重新產生 laravel 的 key, 完成後再啟動服務

#### 命令 shell php artisan key:generate php artisan serve --host=nvda --port=2019

#### 執行結果 shell [alex2@nvda ~/benPrj ]$ php artisan key:generate Application key set successfully. [alex2@nvda ~/benPrj ]$ php artisan serve --host=nvda --port=2019 Laravel development server started: <http://nvda:2019>

太棒了, 像日出日落一樣的正常

### 建立資料庫

一開始建立遠端倉庫用的 laravel 基礎框架時, 可先不處理資料庫設定, 但之後各自要把它完成. 每位開發者有各自開發用資料庫, 公用測試版也有它的資料庫. 當然, 網站正式上線一定會有正式版專用的資料庫.

#### 命令及說明 shellql # 進入 mysql 命令列, 以下 `MYDATABASE, MYDBUSER, MYDBPASSWORD` 請修改對應, charset 用 utf8mb4, collation 用 utf8mb4_general_ci DROP DATABASE IF EXISTS MYDATABASE; CREATE DATABASE MYDATABASE DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; # mysql 5.7 以下可以使用 `WITH mysql_native_password` 或 `WITH sha256_password` 兩種不同的密碼加密方式, 若是 mysql 5.6 以下, 就把這兩個單字移除 CREATE USER 'MYDBUSER'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MYDBPASSWORD'; GRANT ALL ON MYDATABASE.* TO 'MYDBUSER'@'localhost'; FLUSH PRIVILEGES; # 修改 USER 加密方式 ALTER USER 'MYDBUSER'@'localhost' IDENTIFIED WITH sha256_password BY 'MYDBPASSWORD'; ALTER USER 'MYDBUSER'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MYDBPASSWORD';

### 前置作業

#### 命令及說明 `` # 修改資料連結的參數 vi .env # 設定 mysql 建立資料庫時的MYDATABASE, MYDBUSER, MYDBPASSWORD`

vi config/database.php # (可不用修改, 預設 utf8mb4_unicode_ci) mysql 資料庫 collation 預設 utf8mb4_unicode_ci 改為 utf8mb4_general_ci

vi config/logging.php # (可暫時跳過) 修改 建立 自定義版本 log # (可暫時跳過) 自定義的單一日期時間 log 檔案, 每一次 request 產生一個記錄 # (可暫時跳過) 複製自定義 log class, app/Loggers/my1LocalLogger.php # (可暫時跳過) 複製自定義 json 輸出 class, app/Loggers/JsonFormatter.php ```

  1. 開發者 : clone, clone, clone

所有開發者請現在回到各自家目錄, 開始做 clone 並補齊 laravel 設定, 讓大家版本一致

稍後各自增修同一支程式, 製造 conflict 衝突, 然後使用 merge conflict 合併衝突來解決.

  1. 開發者 : 戰鬪, 然後推入遠端倉庫

上一節 clone 並補齊 laravel 設定 的基本工作完成後. 單兵開始就戰鬪位置. 現在的開發實作人員的身份仍然為 alex2git nameben

### 開發者 ben 修改或增加檔案

#### 命令 bash vi resources/views/welcome.blade.php vi resources/views/abcd.blade.php vi routes/web.php git st -s

#### 執行結果及說明 ```shell # 加一些字到 welcome.blade.php [alex2@nvda ~/benPrj ]$ vi resources/views/welcome.blade.php

# 84 行 Laravel 改為 Ben's Laravel # 85 行新增一行

83
84 Ben's Laravel 85

86

# 新增一個 blade 給路由 /a 測試 [alex2@nvda ~/benPrj ]$ vi resources/views/abcd.blade.php

# 這個檔案, 只加了一行 1 hello, 你好

# 修改 route 加入一段 /abcd 路由到上面的 abcd.blade.php 的程式 [alex2@nvda ~/benPrj ]$ vi routes/web.php

18 Route::get('/abcd', function () { 19 return view('abcd'); 20 });

[alex2@nvda ~/benPrj ]$ git st -s M resources/views/welcome.blade.php M routes/web.php ?? resources/views/abcd.blade.php [alex2@nvda ~/benPrj ]$ ```

進入 首頁/abcd 完美如昔. 讚, ben 今天完工了, 要把修改及增加的程式碼 push 推入遠端倉庫.

### 推入遠端倉庫

推入遠端之前, 本地端仍然要先 commit 到本地倉庫. 也才能從本地倉庫推到遠端倉庫.

#### 命令 ```bash git st -s git add . git commit -m '動到 2 支 blade (1 舊 1 新) 及 route

welcome.blade.php abcd.blade.php 在 routes/web.php 加上 /abcd 路由到上面的 abcd.blade.php 的程式' ```

#### 執行結果 shell [alex2@nvda ~/benPrj ]$ git st -s M resources/views/welcome.blade.php M routes/web.php ?? resources/views/abcd.blade.php [alex2@nvda ~/benPrj ]$ git add . [alex2@nvda ~/benPrj ]$ git st -s A resources/views/abcd.blade.php M resources/views/welcome.blade.php M routes/web.php [alex2@nvda ~/benPrj ]$ git commit -m '動到 2 支 blade (1 舊 1 新) 及 route > > welcome.blade.php > abcd.blade.php > 在 routes/web.php 加上 /abcd 路由到上面的 abcd.blade.php 的程式' [master 054f3fe] 動到 2 支 blade (1 舊 1 新) 及 route 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 resources/views/abcd.blade.php [alex2@nvda ~/benPrj ]$

推入遠端倉庫, 但我們在執行前後看一下 log, 觀察它的 (HEAD -> master) , (origin/master, origin/HEAD) 指示器位置

#### 命令 bash git ld git push origin master

#### 執行結果 shell [alex2@nvda ~/benPrj ]$ git ld 1 [#054f3fe] ben, 2019-04-17 12:24:53 +0800 : (HEAD -> master) 動到 2 支 blade (1 舊 1 新) 及 route 2 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : (origin/master, origin/HEAD) 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex2@nvda ~/benPrj ]$ git push origin master Counting objects: 8, done. Delta compression using up to 2 threads. Compressing objects: 100% (7/7), done. Writing objects: 100% (8/8), 756 bytes | 0 bytes/s, done. Total 8 (delta 5), reused 0 (delta 0) To /home/repo 281f0cb..054f3fe master -> master [alex2@nvda ~/benPrj ]$ git ld 1 [#054f3fe] ben, 2019-04-17 12:24:53 +0800 : (HEAD -> master, origin/master, origin/HEAD) 動到 2 支 blade (1 舊 1 新) 及 route 2 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex2@nvda ~/benPrj ]$

完美, 沒有錯誤, 很好, 收工回家.

  1. 開發者 : 持續的開發, 衝突, 合併, 解決

### 共同開發者

共同開發者, 第一次也同樣 clone 遠端倉庫回自己家, 改目錄名或移到適當位置, 現在以另一開發者 alex, git namealex 開發者身份測試

相同的基本 clone 工作及必要設定結束後, 開發者 alex 也積極開始工作, 但我們先看看最新的 git log, 目前 alex 的本地倉庫

#### 執行結果 [alex@nvda ~/ak1 ]$ git ld 1 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : (HEAD -> master, origin/master, origin/HEAD) 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex@nvda ~/ak1 ]$

現在先 alex 也修改 welcome.blade.php

#### 命令 ``bash vi resources/views/welcome.blade.php # 第 84 行的Laravel改為Alex's Laravel` ...(前略) 83

84 Alex's Laravel 85
...(後略)


    `alex` 打算收工暫時告一段落, 結束目前的工作, 把程式推入遠端倉庫, 本地端仍然要先 `commit` 到本地倉庫. 也才能從本地倉庫推到遠端倉庫.

	### 推入遠端倉庫之衝突發生

	#### 命令
	```bash
	git s
	git a .
	git cm '修改 resources/views/welcome.blade.php 的內容'
	git ld
	git push origin master
	```

    #### 執行結果

[alex@nvda ~/ak1 ]$ git s M resources/views/welcome.blade.php [alex@nvda ~/ak1 ]$ git a . [alex@nvda ~/ak1 ]$ git cm '修改 resources/views/welcome.blade.php 的內容' [master c41cf86] 修改 resources/views/welcome.blade.php 的內容 1 file changed, 1 insertion(+), 1 deletion(-) [alex@nvda ~/ak1 ]$ git ld 1 [#c41cf86] alex, 2019-04-17 12:39:14 +0800 : (HEAD -> master) 修改 resources/views/welcome.blade.php 的內容 2 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : (origin/master, origin/HEAD) 創立遠端倉庫用的 laravel 基礎框架 5.8.12

[alex@nvda ~/ak1 ]$ git push origin master To /home/repo/ ! [rejected] master -> master (fetch first) error: failed to push some refs to '/home/repo/' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. [alex@nvda ~/ak1 ]$ ```

哇, 爆炸了, 為什麼被拒絕 ! [rejected] , 注意同一行最後那個括號裡的字 (fetch first), 此刻 alex 並不知道 ben 先前已 push 過, 而且剛好也是都改到相同的一個檔案.

### fetch first

既然如此, 就按照它的指示, 開始操作. fetch 完成後, 還不能 push, 會得到相同的錯誤. 緊接著要做的是用合併解決衝突.

#### 命令 bash git fetch origin master git merge origin/master

#### 執行結果 shell [alex@nvda ~/ak1 ]$ git fetch origin master [alex@nvda ~/ak1 ]$ git merge origin/master Auto-merging resources/views/welcome.blade.php CONFLICT (content): Merge conflict in resources/views/welcome.blade.php Automatic merge failed; fix conflicts and then commit the result. [alex@nvda ~/ak1 ]$

注意 CONFLICT (content): Merge conflict in resources/views/welcome.blade.php , 它指出衝突的來源, 其實就是兩個開發者都改了同一個 resources/views/welcome.blade.php 檔案, 那麼就解決它吧.

### 解決 merge 的 CONFLICT 衝突

#### 命令 shell vi resources/views/welcome.blade.php

#### 執行結果 html 83 <div class="title m-b-md"> 84 <<<<<<< HEAD 85 Alex's Laravel 86 ======= 87 Ben's Laravel 88 <p>改</p> 89 >>>>>>> origin/master 90 </div>

打開衝突發生的檔案, 會看到

第 84 行 <<<<<<< HEAD 到 86 行 ======= 之間的程式碼, 表示現在 alex 自己開發版本修改的內容.

第 86 行 ======= 到 89 行 >>>>>>> origin/master 之間的程式碼, 表示遠端倉庫最後被 ben push 上傳的內容.

alex 此刻要呼叫 ben 來解決問題, 或者找 此專案的總工程師 來解決...... 經過溝通後, 程式修改成另一版本, 原先 <<<<<<<, =======, >>>>>>> 標記的三行, 都要刪除

#### 程式修改完美協調版本 html 83 <div class="title m-b-md"> 84 NVDA Laravel 85 <p>改</p> 86 </div>

### 解決衝突後, 再度 git

#### 命令 bash git s git a . git s git cm '解決 resources/views/welcome.blade.php 衝突' git ld git push origin master git ld git push origin master

#### 執行結果 shell [alex@nvda ~/ak1 ]$ git s A resources/views/abcd.blade.php UU resources/views/welcome.blade.php M routes/web.php [alex@nvda ~/ak1 ]$ git a . [alex@nvda ~/ak1 ]$ git s A resources/views/abcd.blade.php M resources/views/welcome.blade.php M routes/web.php [alex@nvda ~/ak1 ]$ [alex@nvda ~/ak1 ]$ git cm '解決 resources/views/welcome.blade.php 衝突' [master d826a09] 解決 resources/views/welcome.blade.php 衝突 [alex@nvda ~/ak1 ]$ [alex@nvda ~/ak1 ]$ git ld 1 [#d826a09] alex, 2019-04-17 13:06:31 +0800 : (HEAD -> master) 解決 resources/views/welcome.blade.php 衝突 2 [#c41cf86] alex, 2019-04-17 12:39:14 +0800 : 修改 resources/views/welcome.blade.php 的內容 3 [#054f3fe] ben, 2019-04-17 12:24:53 +0800 : (origin/master, origin/HEAD) 動到 2 支 blade (1 舊 1 新) 及 route 4 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex@nvda ~/ak1 ]$ git push origin master Counting objects: 10, done. Delta compression using up to 2 threads. Compressing objects: 100% (9/9), done. Writing objects: 100% (10/10), 931 bytes | 0 bytes/s, done. Total 10 (delta 6), reused 0 (delta 0) To /home/repo/ 054f3fe..d826a09 master -> master [alex@nvda ~/ak1 ]$ [alex@nvda ~/ak1 ]$ git ld 1 [#d826a09] alex, 2019-04-17 13:06:31 +0800 : (HEAD -> master, origin/master, origin/HEAD) 解決 resources/views/welcome.blade.php 衝突 2 [#c41cf86] alex, 2019-04-17 12:39:14 +0800 : 修改 resources/views/welcome.blade.php 的內容 3 [#054f3fe] ben, 2019-04-17 12:24:53 +0800 : 動到 2 支 blade (1 舊 1 新) 及 route 4 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex@nvda ~/ak1 ]$ git push origin master Everything up-to-date [alex@nvda ~/ak1 ]$

最後看到的 log , alex 提交了兩次, 一次改檔本地提交, 另一次是解決衝突. 好了, 終於可以回家了 :-(

  1. 每天工作前第一件事?

### 每天工作前第一件事?

是什麼, 就是把遠端倉庫裡的最新資料拉回來 :-D, 拉回來後, 該解決衝突就馬上解決

> 備註 : git fetch + git merge 等同於 git pull。

目前再度回到 ben 的家

#### 命令 bash git ld git pull origin master git ld

#### 執行結果 shell [alex2@nvda ~/benPrj ]$ git ld 1 [#054f3fe] ben, 2019-04-17 12:24:53 +0800 : (HEAD -> master, origin/master, origin/HEAD) 動到 2 支 blade (1 舊 1 新) 及 route 2 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex2@nvda ~/benPrj ]$ git pull origin master remote: Counting objects: 10, done. remote: Compressing objects: 100% (9/9), done. remote: Total 10 (delta 6), reused 0 (delta 0) Unpacking objects: 100% (10/10), done. From /home/repo 054f3fe..d826a09 master -> origin/master Updating 054f3fe..d826a09 Fast-forward resources/views/welcome.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) [alex2@nvda ~/benPrj ]$ git ld 1 [#d826a09] alex, 2019-04-17 13:06:31 +0800 : (HEAD -> master, origin/master, origin/HEAD) 解決 resources/views/welcome.blade.php 衝突 2 [#c41cf86] alex, 2019-04-17 12:39:14 +0800 : 修改 resources/views/welcome.blade.php 的內容 3 [#054f3fe] ben, 2019-04-17 12:24:53 +0800 : 動到 2 支 blade (1 舊 1 新) 及 route 4 [#281f0cb] alex, 2019-04-17 07:41:40 +0800 : 創立遠端倉庫用的 laravel 基礎框架 5.8.12 [alex2@nvda ~/benPrj ]$

現在啟動服務, 進入 瀏覽器, 看看首頁內容, 衝突解決了.

  1. 實用相關資訊

### 本地端設定值

#### 命令 bash cat .git/config

#### 執行結果 shell [alex@nvda ~/ak1 ]$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = /home/repo/ fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [alex@nvda ~/ak1 ]$

注意 [remote "origin"][branch "master"] 這兩段

[core] 這裡看到的是 本地倉庫 local 之值, 可比對 cat ~/.gitconfig 的 global 值, 常用的我們都會設定到 global, 除非有特定目的才會設在這裡.

### 在本地倉庫端顯示 fetch, push 遠端倉庫的資訊

#### 命令 bash git remote -v

#### 執行結果 shell [alex@nvda ~/ak1 ]$ git remote -v origin /home/repo/ (fetch) origin /home/repo/ (push) [alex@nvda ~/ak1 ]$

### 好用的連結

* Git 面試題

* 四種將分支與主線同步的方法

* 以上這兩篇文章寫得不錯, 跟我們此篇內容有比較多的關聯, 大家找時間把它精讀.

* Git的奇技淫巧 - 簡體中文 此為老外整理 Most commonly used git tips and tricks. 的簡體中文版, 很實用, 極具參考價值.

  1. 本章總結

### 本章使用 git 命令總結 bash git init --bare # 遠端倉庫初始化 git remote add origin 127.0.0.1:/home/repo # 設定 git 本地倉庫到遠端倉庫的連結 git clone /home/repo # 複製遠端倉庫回家 git clone /home/repo myPrj # 複製遠端倉庫回家, 指定目錄名稱 git push origin master # 本地倉庫(分支 master)提交後, 推入遠端倉庫(origin 的分支 master). git pull origin master # 拉回遠端倉庫(origin 的分支 master)最後版本到本地倉庫(分支 master) git fetch origin master # 取得遠端倉庫分支 master 的資料 git merge origin/master # 合併本地倉庫分支 origin/master 的程式碼