---
# System prepended metadata

title: 專案上傳至GITLab
tags: [系統, WEB, GIT]

---

![LABSPACE](https://labspace.com.tw/assets/upload/product//LabSpace-logo-B-03.png =3%x)  **專案上傳至GITLab** [LABSPACE](https://web.labspace.com.tw)

------------------------------
將專案上傳到 GitLab 的過程可以分為以下幾個步驟。這裡假設您已經有一個 GitLab 帳戶並且已經創建了一個新的儲存庫（Repository）。如果還沒有，您可以先到 GitLab 的網站上註冊並創建一個新儲存庫。

### 步驟 1: 安裝 Git

如果您的系統尚未安裝 Git，可以使用以下命令安裝：

* **在 Ubuntu / Debian 上安裝 Git：**

  ```bash
  sudo apt update
  sudo apt install git
  ```

* **在 Fedora 上安裝 Git：**

  ```bash
  sudo dnf install git
  ```

* **在 Arch Linux 上安裝 Git：**

  ```bash
  sudo pacman -S git
  ```

### 步驟 2: 配置 Git

在第一次使用 Git 前，您應該配置您的使用者名稱和電子郵件地址，這將與每次提交的歷史紀錄關聯。

```bash
git config --global user.name "您的名字"
git config --global user.email "您的電子郵件"
```

### 步驟 3: 初始化 Git 儲存庫

在您的專案目錄中，使用以下命令初始化一個新的 Git 儲存庫：

```bash
cd /path/to/your/project
git init
```

### 步驟 4: 添加遠端儲存庫

將您在 GitLab 上創建的儲存庫連接到您的本地儲存庫。替換以下 URL 為您儲存庫的 URL，通常是這種格式：

```arduino
https://gitlab.com/username/repo.git
```

或使用 SSH 格式：

```scss
git@gitlab.com:username/repo.git
```

添加遠端儲存庫的命令如下：

```bash
git remote add origin https://gitlab.com/username/repo.git
```

### 步驟 5: 添加檔案並提交

將專案中的檔案添加到 Git 儲存庫，並提交變更：

```bash
git add .
git commit -m "Initial commit"
```

### 步驟 6: 上傳專案到 GitLab

將本地的提交推送到 GitLab 儲存庫：

```bash
git push -u origin master
```

如果您使用的是 GitLab 預設的主分支名稱為 `main`，請用以下命令替換：

```bash
git push -u origin main
```

### 步驟 7: 驗證上傳

登錄到 GitLab，並檢查您的儲存庫，確認專案檔案已成功上傳。

### 常見問題排解

* **身份驗證問題**：如果您使用 HTTPS 進行推送，可能需要輸入 GitLab 的用戶名和密碼。如果使用 SSH，請確保您已經正確設置 SSH 金鑰並將公鑰添加到 GitLab 的 SSH 設定中。

* **無法推送到遠端**：如果您遇到推送衝突，可能是因為遠端儲存庫已有一些更改。您可以先拉取遠端的變更再進行推送：

  ```bash
  git pull origin master --rebase
  git push origin master
  ```


----

```
git clone https://gitlab.com/labspace-gitlab/harment.git
```
會自動生成一個目錄

![image](https://hackmd.io/_uploads/B1kKueZT1g.png)

若第一次推版時，可以使用`rsync` 變更目錄名再進行 `git push`
```
rsync -avzh /var/www/html/harment-form/ /var/www/html/harment


git clone https://gitlab.com/labspace-gitlab/harment.git
rsync -avzh harment-form/ harment
cd harment
ll
git branch  #確認分支名稱
git remote -v
git add .
git commit -m "Initial commit"
git push -u origin main
```
#### 1. 檢查遠端儲存庫設定
- 在終端機輸入以下命令，查看目前設定的遠端儲存庫：
  ```
  git remote -v
  ```
- **預期輸出**：
  如果有正確設定 `origin`，你應該看到類似以下內容：
  ```
  origin  https://gitlab.com/username/repository.git (fetch)
  origin  https://gitlab.com/username/repository.git (push)
  ```
- **如果沒有輸出**：
  表示尚未設定遠端儲存庫，繼續下一步。

#### 2. 添加遠端儲存庫
- 如果 `origin` 未設定，需手動新增遠端儲存庫 URL。假設你的 GitLab 儲存庫 URL 是 `https://gitlab.com/username/repository.git`，執行：
  ```
  git remote add origin https://gitlab.com/username/repository.git
  ```
- 或者使用 SSH：
  ```
  git remote add origin git@gitlab.com:username/repository.git
  ```
- 再次用 `git remote -v` 確認設定正確。

#### 3. 確認分支名稱
- GitLab 的預設分支名稱可能是 `main` 或 `master`，取決於專案設定。
- 檢查本地分支：
  ```
  git branch
  ```
  - 如果當前分支不是 `main`，可以用 `git checkout main` 切換，或用 `git branch -m main` 將當前分支改名為 `main`。
- 如果遠端分支名稱不同（例如是 `master`），則應改用：
  ```
  git push -u origin master
  ```

#### 4. 驗證遠端儲存庫是否存在
- 前往 GitLab 網站，確認 `https://gitlab.com/username/repository.git` 是否存在，且你有推送權限。
- 如果儲存庫是空的，第一次推送需要設定上游分支：
  ```
  git push -u origin main
  ```

#### 5. 檢查認證與權限
- **HTTPS**：
  - 如果使用 HTTPS，執行 `git push` 時會提示輸入使用者名稱和密碼。
  - 輸入你的 GitLab 使用者名稱和密碼（若啟用 2FA，則輸入個人存取令牌）。
  - 若不想每次輸入，可以設定憑證管理器：
    ```
    git config --global credential.helper store
    ```
- **SSH**：
  - 如果使用 SSH，確保 SSH 金鑰已加入 GitLab（參考前述「SSH 設定」）。
  - 測試連線：
    ```
    ssh -T git@gitlab.com
    ```
  - 若看到「Welcome to GitLab」，表示 SSH 設定正確。

#### 6. 推送測試
- 修正後再次推送：
  ```
  git push -u origin main
  ```
- `-u` 表示設定上游分支（upstream），之後只需用 `git push`。

---

### 完整範例流程
假設你在 `/var/www/html/harment` 初始化了一個本地儲存庫，並想推送至 GitLab：
1. 確認遠端儲存庫：
   ```
   git remote -v
   ```
2. 若無 `origin`，新增：
   ```
   git remote add origin https://gitlab.com/username/repository.git
   ```
3. 提交更改（如果尚未提交）：
   ```
   git add .
   git commit -m "Initial commit"
   ```
4. 推送：
   ```
   git push -u origin main
   ```

---

### 如果還是失敗
- **檢查錯誤訊息**：提供完整的錯誤訊息給我，我可以幫你進一步診斷。
- **確認路徑**：確保你在正確的 Git 儲存庫目錄（`git status` 應顯示工作區狀態）。
- **網路問題**：確認你的伺服器能連接到 GitLab（例如用 `ping gitlab.com`）。

1. **分支問題已解決**  
   你成功將本地分支從 `master` 重命名為 `main`（`git branch -m master main`），這與遠端倉庫的 `HEAD branch: main` 一致。

2. **新的錯誤原因**  
   當你執行 `git push -u origin main` 時，出現以下錯誤：
   ```
   To https://gitlab.com/labspace-gitlab/ntpu_pa_another.git
    ! [rejected]        main -> main (fetch first)
   error: failed to push some refs to 'https://gitlab.com/labspace-gitlab/ntpu_pa_another.git'
   hint: Updates were rejected because the remote contains work that you do not have locally.
   ```
   這表示遠端倉庫的 `main` 分支已經有內容（可能是其他提交），而你的本地倉庫缺少這些內容。Git 拒絕推送是因為它檢測到衝突，建議你先拉取遠端內容（`git pull`）。

3. **目前狀態**  
   - 本地分支：`main`，且 `working tree clean`（沒有未提交的更改）。
   - 遠端分支：`main`，但包含你本地沒有的提交。

---

### 解決方法
你需要先將遠端的 `main` 分支內容拉取到本地，然後再推送。以下是具體步驟：

#### 步驟 1：拉取遠端內容
執行：
```
git pull origin main
```
- 這會從遠端倉庫下載 `main` 分支的內容並嘗試合併到你的本地 `main` 分支。
- 你可能需要輸入 GitLab 的帳號（`service@labspace.com.tw`）和密碼（或個人存取令牌）。

#### 步驟 2：處理可能的合併衝突
- 如果本地和遠端的檔案有衝突，Git 會提示你手動解決衝突。衝突解決後，執行：
  ```
  git add <衝突檔案>
  git commit
  ```
- 如果沒有衝突，`git pull` 會自動完成合併。

#### 步驟 3：推送本地分支
拉取並合併成功後，再次推送：
```
git push -u origin main
```
這次應該會成功，因為本地已經包含遠端的提交歷史。

---

### 如果你不想保留遠端內容
如果你確定遠端倉庫的內容不需要保留（例如它是測試資料或舊版本），可以用強制推送覆蓋遠端：
```
git push -f origin main
```
- **警告**：`-f`（force）會強制用本地 `main` 分支覆蓋遠端 `main` 分支，遠端現有的提交將丟失。請確認這是你想要的結果，並確保其他協作者不會受到影響。

---

### 建議流程（安全方式）
假設你希望保留遠端和本地的內容，以下是推薦的安全流程：
```
# 拉取遠端內容
git pull origin main

# 如果有衝突，手動解決後提交
git add .
git commit -m "Resolve merge conflicts"

# 推送
git push -u origin main
```

---

### 認證綁定
從你的輸出看，推送時需要手動輸入帳號和密碼（`service@labspace.com.tw`）。為避免每次都輸入，可以：
1. **使用個人存取令牌（Personal Access Token）**  
   - 在 GitLab 生成一個令牌（Settings > Access Tokens），然後在密碼欄輸入令牌而不是帳號密碼。
2. **設置 Git 認證緩存**  
   ```
   git config --global credential.helper cache
   ```
   這會暫時緩存你的認證資訊。
3. **使用 SSH**  
   - 配置 SSH 金鑰並將遠端 URL 改為 SSH 格式：
     ```
     git remote set-url origin git@gitlab.com:labspace-gitlab/ntpu_pa_another.git
     ```

---

### 結論
目前的主要問題是遠端 `main` 分支有你本地沒有的內容。執行 `git pull origin main` 是最直接的解決方式。如果還有其他錯誤（例如認證失敗或合併衝突），請提供輸出訊息，我會繼續協助你！

### 附註

如果您計劃經常使用 GitLab 進行版本控制，建議學習一些常用的 Git 指令，例如 `git pull`、`git branch`、`git merge` 等，以更有效地管理您的專案。


補充說明：[VSCode 連動GitLab ，相關設定檔不進行GIT 連動](https://hackmd.io/@labspace/S16RL77lJl)




# ![LABSPACE](https://labspace.com.tw/assets/upload/product//LabSpace-logo-B-03.png =4%x)  層次數位空間有限公司


若想要瞭解更多技術資訊或者希望有人可以協助佈建，可洽[層次數位空間有限公司](https://labspace.com.tw)

# !! 一個念頭與想法 !!
您有一個很棒的主意或想法嗎？我們聆聽並為您提供快速分析與規劃提案。層次數位讓您的系統平台更有層次。

[![product](https://labspace.com.tw/assets/upload/product//product.png)](https://web.labspace.com.tw)


