# Gitlab merge request 教學

首先每個project 會有一個共同管理的遠端repo,我們常稱作Upstream。
會從這個upstream fork出個人的遠端repo,基本上改動都會是做在個人本端repo以及個人遠端repo上,當有需要其他人來一起協作或討論時可以開放個人遠端repo的權限。
### fork

點擊畫面Fork可以複製一份自己的repo
### remote repo範例

可以透過```$git remote add [remote-name] [url]```這個指令來新增遠端的repo目標位置。
<u>[remote-name]可以依據個人習慣來自己定義,通常upstream會定義為最原始repo,通常origin或個人名稱會當作個人管理repo</u>
```console
$git remote add upstream git@192.168.3.4:decoder/Mega/libdecoder.git
$git remote add howard git@192.168.3.4:howardhsien/libdecoder.git
```
若想要將upstream程式碼載下來,可以下fetch指令```$git fetch [remote-name]```
```console
$git fetch upstream
```
很重要的一點是:git fetch 命令只會下載資料到你的版本庫——它並不會自動合併你的任何工作內容,也不會自動修改你正在修改的東西; 當你準備好合併你的工作內容時,你必需用手動的方式進行合併。
若想要將其他人repo程式碼載下來,可以下以下指令(需要先確認是否有他人repo的權限)
```console
$git fetch paul
$git fetch tamino
$git fetch james
$git fetch howard
```
當載下程式碼後可以透過checkout/merge等指令```$git merge [remote-name] [branch-name] ``` ```$git checkout [remote-name] [branch-name] ```來同步或測試他人程式碼
```console
$git checkout howard/develop
$git merge upstream/master
```

### 權限設定

點選 => Setting -> Members

選擇inviting members => 選擇Developer (可以依據欲開放的權限調整)
當大家有共識,或是希望可以合併回共同遠端repo時,可以發送merge request,等待共有repo的負責人進行merge的動作。
### merge request


選擇想要申請合併的branch並發送申請,負責人此時會收到email以及gitlab上面會出現有merge request待處理的通知。
Referenece:
https://git-scm.com/book/zh-tw/v2/Git-%E5%9F%BA%E7%A4%8E-%E8%88%87%E9%81%A0%E7%AB%AF%E5%8D%94%E5%90%8C%E5%B7%A5%E4%BD%9C