GitLab – Linux Local 端建立新 Project

Loading

測試環境 Ubuntu 22.04 Desktop ( 虛擬機 )

Git 的主要幾個指令可以參考 https://zh.m.wikibooks.org/zh/File:Git_data_flow_simplified.svg 的說明.

安裝 git .

root@ben-virtual-machine:~# apt install git
root@ben-virtual-machine:~# git --version
git version 2.34.1

從 Linux Local 端建立新 Project

初始化(只需要做一次)

  • git config
    設定使用者名稱與 Mail .

    root@ben-virtual-machine:~# git config --global user.name "Ben"
    root@ben-virtual-machine:~# git config --global user.email "ben@gmail.com"
    
  • git init
    設定哪一個目錄是需要透過 git 來保管.

    root@ben-virtual-machine:~# mkdir test_code
    root@ben-virtual-machine:~# cd test_code
    

    並做初始化設定,會產生 .git 目錄來記錄相關設定.

    root@ben-virtual-machine:~/test_code# git init
    hint: Using 'master' as the name for the initial branch. This default branch name
    hint: is subject to change. To configure the initial branch name to use in all
    hint: of your new repositories, which will suppress this warning, call:
    hint:
    hint:   git config --global init.defaultBranch <name>
    hint:
    hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
    hint: 'development'. The just-created branch can be renamed via this command:
    hint:
    hint:   git branch -m <name>
    Initialized empty Git repository in /root/test_code/.git/
    
  • git remote
    設定上傳到 GitLab 的 Project 名稱(同一個目錄的 Project 只須設定一次 git remote 即可),須注意這邊我是放到 ben 使用者下面,請自行更換存在的使用者,之後可以透過 git remote show origin 檢視其設定.

    root@ben-virtual-machine:~/test_code# git remote add origin http://192.168.31.136/ben/test.git
    

    Note : 如果設定錯誤可以透過 remove 參數移除.

    root@ben-virtual-machine:~/test_code# git remote remove origin
    

有新增或是修改資料都需要 add , commit 與 push

  • git add 與 commit (資料暫存在 Local 端)
    建立一個程式碼.

    root@ben-virtual-machine:~/test_code# vi test.cpp
    #include <fstream>
    #include <iostream>
    #include <chrono>
    #include <ctime> 
    #include <unistd.h>
     
    using namespace std;
     
    int main() {
    while(true)
    {
        ofstream myFile_Handler;
        // File Open
        myFile_Handler.open("/tmp/1.txt", std::ios_base::app);
     
        auto timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
       
        // Write to the file
        myFile_Handler << ctime(&timenow) << endl;
     
        // File Close
        myFile_Handler.close();
        
        // Sleep
        sleep(60);
    }
    }
    

    並透過 git add 與 commit 將程式交給 git 保管. git add 的 “.” 代表現有目錄所有檔案,也可以直接指定檔案名稱.

    root@ben-virtual-machine:~/test_code# git add .
    
    root@ben-virtual-machine:~/test_code# git commit -m "First Code"
    [master (root-commit) 938dfba] First Code
     1 file changed, 27 insertions(+)
     create mode 100644 test.cpp
    

    檢視其狀態 (須注意這邊程式交給 Local 端而已).

    root@ben-virtual-machine:~/test_code# git status
    On branch master
    nothing to commit, working tree clean
    
  • push ( 資料上傳至 GitLab 端)
    上傳資料至 GitLab 端

    root@ben-virtual-machine:~/test_code# git push -u origin master
    Username for 'http://192.168.31.136': ben
    Password for 'http://ben@192.168.31.136':
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 466 bytes | 466.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    remote:
    remote:
    remote: The private project ben/test was successfully created.
    remote:
    remote: To configure the remote, run:
    remote:   git remote add origin http://192.168.31.136/ben/test.git
    remote:
    remote: To view the project, visit:
    remote:   http://192.168.31.136/ben/test
    remote:
    remote:
    remote:
    To http://192.168.31.136/ben/test.git
     * [new branch]      master -> master
    Branch 'master' set up to track remote branch 'master' from 'origin'.
    

    可以透過網頁看到程式碼的確已上傳.

    或是透過指令看狀態.

    root@ben-virtual-machine:~/test_code# git remote show origin
    
    (gnome-ssh-askpass:12758): Gtk-WARNING **: 22:09:27.174: cannot open display:
    error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass'
    Username for 'http://192.168.31.136': ben
    
    (gnome-ssh-askpass:12761): Gtk-WARNING **: 22:09:43.137: cannot open display:
    error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass'
    Password for 'http://ben@192.168.31.136':
    * remote origin
      Fetch URL: http://192.168.31.136/ben/test.git
      Push  URL: http://192.168.31.136/ben/test.git
      HEAD branch: master
      Remote branch:
        master tracked
      Local branch configured for 'git pull':
        master merges with remote master
      Local ref configured for 'git push':
        master pushes to master (up to date)
    
  • git pull
    如果程式碼有在其他地方被修改時可以透過 pull 從 GitLab 下載.

    root@ben-virtual-machine:~/test_code# git pull
    Username for 'http://192.168.31.136': ben
    Password for 'http://ben@192.168.31.136':
    remote: Enumerating objects: 1, done.
    remote: Counting objects: 100% (1/1), done.
    remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (1/1), 248 bytes | 248.00 KiB/s, done.
    From http://192.168.31.136/ben/test
       938dfba..d76b680  master     -> origin/master
    Updating 938dfba..d76b680
    Fast-forward
     test.cpp | 1 +
     1 file changed, 1 insertion(+)
    

帳號密碼問題

從前面的範例來看我們需要不斷地輸入使用者帳號與密碼,有辦法可以省略掉這一步驟嗎?

我們可以設定 SSH 的 Key,在 Linux 端使用指令產生 SSH 的 Public 與 Provate Key ,並將 Public Key 存放至 Gitlab 即可以,關於 SSH 公/私金鑰 請參考 – https://benjr.tw/98344

透過 ssh-keygen 來產生 SSH 公私鑰 ,這邊不使用 passhrase (需要一串密碼來解開私鑰) , -C 後面名稱可以使用 E-Mail 或是姓名皆可.

[root@localhost ~]# ssh-keygen -t rsa -C ben@gmail.com
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jbZqlgzXm8VHXyGzUkjmn/huqmxm6XzB4wAcSB6yg2k ben@gmail.com
The key's randomart image is:
+---[RSA 3072]----+
|   ..o.   .o.    |
|  o +...  o. + . |
| E o .. .  .. + .|
|.   .  o o .+.. .|
|       .S.oo.+ . |
|    . ...oo+o .  |
|     + ..++.o.   |
|      =.== o..   |
|     o. ==o.o.   |
+----[SHA256]-----+

SSH 產生的 公/私金鑰 皆儲存在家目錄的 .ssh 目錄裡面.

[root@localhost ~]# ll .ssh/
id_rsa       id_rsa.pub   known_hosts

id_rsa.pub 就是公鑰,內容要複製到 GitLab 網頁並儲存起來.

[root@localhost ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKcNJjUm3c2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxP6VvRTmQLik8yLEH21LnEUfegJIka9qiJJ+vrh4hkT1zNIb1s7Ax7YaRGPA2BhNtXo9YIUAcvjaX5pZGMwQZt8DRGjvYV6/0= ben@gmail.com

我這邊使用 ben 身分登入 GitLab 網頁,並點選 User Settings / SSH Keys .

把剛剛的 id_rsa.pub 內容貼到網頁的 Key 裡面 ,並點選 Add Key 儲存起來.

這樣在使用者端就不再需要帳號密碼了.

先把原先透過 http 下載的方式改成 SSH .

[root@localhost test_code]# git remote remove origin
[root@localhost test_code]# git remote add origin git@192.168.31.136:ben/test.git

這樣下次下指令就不需要再輸入帳號與密碼了(第一次須接受 Gitlab 的 Public Key)

[root@localhost test_code]# git pull
The authenticity of host '192.168.31.136 (192.168.31.136)' can't be established.
ECDSA key fingerprint is SHA256:M5PIEiSAGg6j2yGHGck5dNY4C22uL9XHzBHClMJh0lk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.31.136' (ECDSA) to the list of known hosts.
From 192.168.31.136:ben/test
 * [new branch]      master     -> origin/master
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料