---
# System prepended metadata

title: Git 常用語法及概念

---

<!-- {%hackmd @bou/style %} -->
# Git 常用語法及概念


## what is git?
反正就是用來上傳code到github上的東西。
## HOW TO USE IT
### 下載GIT
#### [GIT官方網頁](https://git-scm.com/downloads)
![](https://i.imgur.com/ytXCBXN.png)


下載的部分就是一直next，不用更改~~
  
### 下載 vs code(非必要)
關於這部分，請自己上網搜尋你要的程式語言。
  
    
    
### 創建Github帳號

就是按照預設的設置一直下一步就好，不需要特別更改內容。

### 創建一個repositor(儲存庫)

![](https://i.imgur.com/qMIrGn0.png)

點選「New」

![](https://i.imgur.com/siEO23T.png)

打上名字以及描述(optional)就好

![](https://i.imgur.com/ypwy87O.png)

再來會進到以下頁面

![](https://i.imgur.com/lw1Zf8M.png)

接下來，我們使用 SHH 上傳，因為 HTTPS 好像自2020年時就不支援 git

按「Settings」

![](https://i.imgur.com/32WIN2l.png)

滑到下面，選擇「 Developer settings 」

![](https://i.imgur.com/4tzTY06.png)
  
    
    
再點選「Personal access tokens」

![](https://i.imgur.com/szPmYt4.png)

接下來，按下「Windows+R」再輸入 cmd
<center>
    
![](https://i.imgur.com/syzsffU.png)
    
</center>
  
  
輸入以下(包含引號，要改成自己的email)
<pre><code class="hljs ruby">ssh-keygen -t rsa -b <span class="hljs-number">4096</span> -C <span class="hljs-string">"your_email@example.com"</span>
</code></pre>

會出現以下幾行

<pre><code class="hljs delphi">Generating <span class="hljs-keyword">public</span>/<span class="hljs-keyword">private</span> rsa key pair.
Enter a <span class="hljs-keyword">file</span> <span class="hljs-keyword">in</span> which <span class="hljs-keyword">to</span> save the key (/Users/you/.ssh/id_rsa): [Press enter]
Enter passphrase (empty <span class="hljs-keyword">for</span> no passphrase): [<span class="hljs-keyword">Type</span> a passphrase]
Enter same passphrase again: [<span class="hljs-keyword">Type</span> passphrase again]
</code></pre>

一直按enter就好囉!

最後，打開檔案總管之後開啟C槽，再打開user，裡面會有一個 .ssh 資料夾裡面會有一個「id_rsa.pub」 的檔案
使用 vscode 或是 記事本打開，複製全部  ( 由 ssh-rsa開頭，自己的 email 結尾 )

接著返回 Github 儲存庫的頁面，自訂一個名稱，再把剛剛那一大串複製進去就好囉~
(最後還要再輸入一次帳號密碼)

:::info
SSH 原理介紹

SSH 就是在電腦中設定好金鑰，然後藉由剛剛的動作把公鑰複製上去
上傳時與電腦中的私鑰進行比對，相同的話就開始動作。
:::

回到 Github 的頁面，切換成「SSH」並複製。

![](https://i.imgur.com/qm03rgi.png)


### 上傳檔案
接下來，打開準備要上傳的資料夾。
若目前沒有檔案在裡面，就隨便放個圖片或是txt就好。

有兩個方法：

#### GIT bash

![](https://i.imgur.com/hKSjfFc.png)

:::warning
是打開「Git Bash」!!
:::

#### Vs Code

選擇打開資料夾，打開要上傳的那個資料夾即可。

### Terminal 中 指定目錄

Git bash 顯示
![](https://i.imgur.com/QEcWRmT.png)

Vs Code 顯示
![](https://i.imgur.com/BhpQaoH.png)

:::spoiler 如果不是要上傳的資料夾目錄

[教學連結(click me!)](https://www.ibm.com/docs/zh-tw/ssw_aix_71/devicemanagement/HT_cmd_change_otherdir.html)
總之就是透過「cd」這個指令來做更改~~
:::
  
  
### 接下來
進入之後，輸入 `git init`
資料夾中就會有出現一個隱藏資料夾「 .git 」

可以先輸入 `git status`

會看到有紅字，稍後會再解釋。

輸入 `git add `
如果要全部的話，就加上 `.`
如果要特定檔案的話，就加上檔名

再輸入一次 `git status` 就會看到不一樣的內容喔~

輸入 `git commit -m "更新資訊"`
:::warning

雙引號要保留喔!
:::

接下來輸入 `git remote add origin git@github.com:boyu0710/cpp-problem_colve.git`

:::warning
其中的「origin」 可以更改成自己想要的名字
後面那串改成剛剛在 Github 複製下來的那串文字 ( 格式與上面的那串相同 )
:::

上面那行程式是代表 origin 就等於我的那個儲存庫 SSH url 更好的解釋就是【數據庫簡稱】

如果同時有很多儲存庫的話，就一樣 add 但是名字要換就好 ~~

:::info
**remote 相關指令**

```
git remote -v 
```
可以看到目前的 remote 清單( 包含 url ) //可以試試看去掉最後的「-v」

```
git remote set-url origin git://new.url.here
```
顧名思義就是更改名字

```
git remote remove origin
```
就是刪除舊有 remote
:::

再來輸入以下
```
git branch -M main
```
其中的"main"這是可以自己換的~

:::info
 關於 " main "
 若是「完全按照我上面的指示」的話，目前這個儲存庫是不會有任何 branch 的
 至於 branch 是什麼，可以想像成在整個儲存庫下資料夾
 通常會命名成 "main" 或是 "master" 或是自己取，都可以
:::
  
 

最後
```
git push -u origin(要改成自己取的名字喔!) main(自己建立的 branch)
```
再回到Github頁面刷新就好了~~  
  
![](https://i.imgur.com/x1TbIOB.png)

兩個 branch
  
    

這是我第一次接觸這個，花了一個下午@@
最後搞懂後其實很簡單，希望不要再有人跟我一樣XD
所以我才會寫這篇

最後，我寫了一個自動的程式，放在我的 github
```cpp=
#include<iostream>
#include<windows.h>
#include<ctime>
#include<algorithm>
#include<string>
#include<cstdlib>
using namespace std;
// struct tm {
//   int tm_sec;   // s 0~60 exp:61
//   int tm_min;   // min 0~60 exp:61
//   int tm_hour;  // h 0~23
//   int tm_mday;  // 幾月幾號 1~31
//   int tm_mon;   // month 0~11
//   int tm_year;  // 西元年 since 1900
//   int tm_wday;  // monday~sunday 0~6
//   int tm_yday;  // 1~365
//   int tm_isdst; // 夏令時間
// };
string reverse(string s){
    string ans="";
    for(int d=s.size()-1;d>=0;d--){
        ans+=s[d];
    }
    return ans;
}
string int2str(int a){
    string ans="";
    while(a){
        ans+=a%10+'0';
        a/=10;
    }
    ans=reverse(ans);
    return ans;
}

int main(){
    time_t now=time(0);
    tm *ltm = localtime(&now);
    system("git status");
    system("git add .");
    
    string cmd="git commit -m \"";
    cmd+=int2str(1900+ltm->tm_year);
    if(1+ltm->tm_mon<10){
        cmd+="0"+int2str(1+ltm->tm_mon);;
    }
    else{
        cmd+=int2str(1+ltm->tm_mon);
    }
    if(ltm->tm_mday<10){
        cmd+="0"+int2str(ltm->tm_mday);    
    }
    else{
        cmd+=int2str(ltm->tm_mday);
    }
    cmd+='"';
    cout<<cmd<<"\n";
    const char* c_s = cmd.c_str();
    system(c_s);
    system("git push origin master");
    cout<<"\n\nupload success!!";
}
```