---
title: 使用 cygwin 64 在 win10  執行git 和repo工具(棄用)
disqus: hackmd
---
使用 cygwin64 在 windows10 執行git和repo工具(棄用)
===
[TOC]
## 1. 在windows10 安裝 cygwin64
---
### (1) 安裝說明
[cygwin網址](https://www.cygwin.com/)

一直按下一步,除非中間過程你要改路徑,直到選擇package來源

cygwin必要套件安裝,請照造下圖依序安裝
參考此[網站](http://yandonghua.blogspot.com/2010/08/cygwinrepo.html),將要裝的套件裝好
[](https://i.imgur.com/J6JGU2u.png)
其中 curl 內建package已經有勾選,按照下圖安裝其他套件, View選擇Full,搜尋套件後,將要安裝的項目改成keep
### (2) libreadline7 安裝

### (3) git 安裝

### (4) 文字編輯器 安裝
這邊我習慣用vim

### (5) tig 工具(可視化git commit) 安裝

### (6) python 安裝
20201101更新
請安裝python2 and python3

### (7) openssh 安裝

### (8) 壓縮解壓縮工具 安裝

### (9) pip 安裝完成

### (10) 安裝完成

## 2. 設定以避免無法執行在Cygwin上下載的安裝檔 - 權限錯亂
[參考文件](https://www.evernote.com/shard/s580/client/snv?noteGuid=297b9ea2-7396-4f92-a210-ad2705e09ae5¬eKey=567bbe6f4098fc2058f3697cc0f6aa80&sn=https%3A%2F%2Fwww.evernote.com%2Fshard%2Fs580%2Fsh%2F297b9ea2-7396-4f92-a210-ad2705e09ae5%2F567bbe6f4098fc2058f3697cc0f6aa80&title=%25E7%2584%25A1%25E6%25B3%2595%25E5%259F%25B7%25E8%25A1%258C%25E5%259C%25A8Cygwin%25E4%25B8%258A%25E4%25B8%258B%25E8%25BC%2589%25E7%259A%2584%25E5%25AE%2589%25E8%25A3%259D%25E6%25AA%2594%2B-%2B%25E6%25AC%258A%25E9%2599%2590%25E9%258C%25AF%25E4%25BA%2582)
:::info
避免發生無法執行在Cygwin所產生的檔案
問題應該是執行在Cygwin所產生的檔案時,權限的部分Cygwin會仿照Linux的權限系統刻印。所以在Windows的環境執行Cygwin產生的執行檔時Windows會拒絕執行,因為此檔案並沒有刻印上Windows的權限系統上的資料
但是一般的檔案就不會有問題了,如果只是讀寫檔案的話
:::
```gherkin=
'/' 等同於 linux 的 '-'
設定資料夾在windows的權限,若是設定1不行,執行設定2
指令要跑一陣子
### 設定1
$ takeown /F "C:\cygwin64" /R
$ icacls "C:cygwin64" /reset /T 
### 設定2
$ takeown /F "C:\cygwin64" /R
$ icacls "C:cygwin64" /grant Everyone:F /T
```
```gherkin=
修正資料夾在Cygwin上掛載參數,取消模擬POSIX文件的權限系統:ACL
加入參數:noacl
$ vim /etc/fastab
添加下列指令
C:/cygwin64 / ntfs binary,posix=0,noacl,override 0 0
```

## 3. 在 cygwin64 安裝 repo 套件
---
> repo 套件是用來管理專案用的,假設一個專案有許多資料夾,每個資料夾都有自己的git,我們不可能一包一包去git clone下載,此時用repo管理是最適合不過的
[安裝repo參考網址](https://juejin.im/post/6844904057421742094)
### (1) 打開cygwin,創建放置repo套件的資料夾
```gherkin=
進到家目錄後,創建一個叫做bin的資料夾
$ mkdir bin
```

```gherkin=
這是你家目錄的路徑,這個名字應該是會使用電腦帳號的名字,我也不知道的啦
$ pwd
```

```gherkin=
這是你家目錄的路徑,這個名字應該是會使用電腦帳號的名字,我也不知道的啦
$ pwd
```
### (2) 進入bin後,下載repo package套件
```gherkin=
$ cd bin
$ curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo > ~/bin/repo 
$ curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo.cmd > ~/bin/repo.cmd
修改執行權限
$ chmod a+rx ~/bin/repo
```

> 注意以下的步驟若你沒有將SSH PUBLIC KEY交給學長,就無法進行推commit到GITHUB遠端!!!!
所以以下的測試流程會以*HTTPS*網址為主,若你確認KEY已經申請,則可以改成*SSH*下載,這樣推CODE不用輸入帳密,因為GITHUB遠端認得你這台電腦

## 4. 產生 SSH key 並交給學長
---
:::info
當上述都完成後,要先產生ssh key,因為之後的測試,再推commit進遠端需要權限!!
這邊的概念是,遠端的github如何知道 使用者(你) 是否有權限對這個倉庫做修改上傳??
```gherkin=
github的機制是,看看這個github遠端帳號有沒有你這台電腦的key,判斷行為如下:
    有:
    => 代表這個github遠端帳號認識你這台電腦,可以讓你做修改上傳
    沒有:
    => 代表這個github遠端帳號根本不知道你是誰,所以你無權限做修改上傳
```
:::
### (1) 先確認win10有沒有安裝OPENSSH CLINET
請依照下圖確認



```gherkin=
如果有裝OpenSSH用戶端,就可以執行下一步,若沒有安裝,請按新增功能增加
```

### (2) 打開cygwin,然後輸入以下指令產生key
```gherkin=
$ ssh-keygen
```

### (3) 將public key交給學長吧
```gherkin=
首先到key的位置 然後使用ls查看
$ cd ~/.ssh
這邊注意路徑~符號是代表你的家目錄,所以等同於/home/帳號名稱/,
注意在cygwin上都是使用linux base的符號路徑,與windows區別如下
 ### linux 
 路徑符號使用 /
 ### windows 
 路徑符號使用 \
$ ls
若要查看有沒有隱藏資料夾使用下列指令
$ ls -a
```

```gherkin=
觀察id_rsa.pub裡面的內容
$ cat id_rsa.pub
```

```gherkin=
再來將這個檔案複製到d槽,或是其他路徑
$ cp id_rsa.pub /cygdrive/d/
將這個檔案壓縮如下,交給學長
```


```gherkin=
學長收到後會把這個key加到github遠端,如下圖,
代表遠端的github帳號已經可以認得你這台電腦了,
所以你這台電腦就有修改這個倉庫的權限了!!
```

## 5. git 測試
---
### (1) 回到家目錄後,創一個NTUT資料夾並進入
```gherkin=
$ cd ~
$ mkdir NTUT
$ cd NTUT
```

### (2) 下載測試用的source 
```gherkin=
### 完整指令查詢請下
$ mkdir NTUT
$ man git
### 下載測試git來源
若沒有申請KEY在遠端GITHUB,用HTTPS下載:
$ git clone https://github.com/masteree108/NTUT_for_testing.git
若已經有申請KEY在遠端GITHUB,請選用SSH下載:
$ git clone git@github.com:masteree108/NTUT_for_testing.git
$ cd NTUT_for_tesing
$ ls 可看到有README.md檔案
```

### (3) 使用tig 看看現在有哪些commit
```gherkin=
### 完整指令查詢請下
$ man tig
### 常用指令如下 
進入commit: enter
離開: q
完整顯示commit內容: d
往下: j
往上: k
搜尋: /search_name
```

### (4) 使用vim 工具隨意編輯README.md
```gherkin=
### 完整指令查詢請下
$ man vim
### 編輯README.md
$ vim README.md
### 常用指令如下
編輯此行: i
從下一行開始編輯: o
回覆上一動: u
取消命令: esc
搜尋: /search_name
存檔後離開: :wq (注意有冒號)
不存檔強制離開: :q! (注意有冒號)
到指定行數: :(冒號+行數)
複製: v 選擇要複製的文字,按下y
貼上:將上一動複製的按下p
```
### (5) 編輯後查詢,並加修改後的檔案加入暫存區(工作區=>暫存區)
```gherkin=
工作區的檔案git能知道是否修改
若剛剛有編輯README.md 成功後,可用tig或如下指令觀察
$ git status 
```

```gherkin=
$ git add README.md  (嚴禁使用git add * )
 再觀察一次檔案狀態
$ git status
```

```gherkin=
使用tig 觀察
$ tig
```

### (6) 將add後的檔案提交(commit)到本地倉庫
```gherkin=
$ git commit
 若是有裝vim 預設編輯器會以vim 套件來編輯,紅色框為新增的提交說明
這裡很重要,可以提醒這個commit的功能為何,將來找bug或找相似的功能會非常好用
編輯後存檔離開
```

```gherkin=
在看一下git狀態,因為已經提交到本地倉庫,所以目前工作區為乾淨的
$ git status 
```

```gherkin=
$ tig
可看到目前增加的commit 的內容,包括何人修改,修改內容與提交說明
```

### (7)  將本地倉庫推至遠端倉庫(再次提醒必須key有申請過後才能使用)
```gherkin=
$ git push
```
## 6. repo 測試
---
:::info
雖然目前有vott source 和python track code兩包,但之後的code 可能會越來越多,所以使用repo來管理整個專案,才不用每次都一包一包下載
:::
### (1) 創建資料夾後,使用repo下載專案
注意以下的示範是使用HTTPPS的連結
```gherkin=
$ cd ~/NTUT
$ mkdir VoTT
$ cd VoTT
```
```gherkin=
管理倉庫來源下載
```
[VoTT管理專案的倉庫](https://github.com/masteree108/VoTT_NTUT_WIN10_repo/blob/master/default.xml)

```gherkin=
若沒有申請KEY在遠端GITHUB,用HTTPS下載:
$ ~/bin/repo init -u https://github.com/masteree108/VoTT_NTUT_WIN10_repo.git -b master
若已經有申請KEY在遠端GITHUB,請選用SSH下載:
$ ~/bin/repo init -u git@github.com:masteree108/VoTT_NTUT_WIN10_repo.git -b master
```

:::warning
若是在下載時有出現
Permissions 0770 for '/home/xxxxx/.ssh/id_rsa' are too open.
可用下列指令修改權限,再重新下載即可
$  chmod 400 ~/.ssh/id_rsa
:::
```gherkin=
現在VoTT的資料夾只有.repo還沒有各別的專案資料夾
$ ls -a 可看到只有.repo資料夾
更新來源(等同於從遠端下載)
$ ~/bin/repo sync 
指定連結到遠端的主分支
$ ~/bin/repo start master --all
注意下圖是UBU18而非WIN10,放錯圖
```

```gherkin=
關於 ~/bin/repo start master --all 驗證
這是代表本倉庫的分支要連結到遠端的哪個分支.由於目前我這邊沒有設定任何分支,所以以master主分支為準
可以使用如下指令觀察
$ cd CVTRK/WIN10
$ git branch -a
可觀察到目前連結到的是master分支
```

### (2) 觀察此專案內容
```gherkin=
repo sync 後可看到兩包資料夾,注意若是以後只是要從遠端更新專案,
只需要下下列指令,就會從遠端將資料更新到本地端
$ ~/bin/repo sync 
下載後可看到兩包資料夾
$ ls 
```

```gherkin=
若是要查有沒有隱藏資料夾使用下列指令,可以看有一包.repo 
$ ls -a
```

```gherkin=
進入.repo我們可以看到各自的來源是從哪個github倉庫過來的
$ cat .repo/manifest.xml
```


```gherkin=
本地端倉庫路的確如上圖綠線設定
```

## 7. 安裝python套件
### (1) 打開cygwin64 安裝shortuuid、opencv-contrib-python
2021不再支援pip指令,安裝完成後請開啟cygwin並出入下列指令更新pip
$pip3 install shortuuid 會出錯請依照log提示更新pip


---
## 8. 測試使用Anaconda來安裝Python套件包(測試完成)
https://hackmd.io/@NTUTVOTT/SJbese-Iv
[Anaconda下載](https://www.anaconda.com/products/individual#windows)

增加環境變數至系統
選取環境變數


[環境變數參考網站](https://ithelp.ithome.com.tw/articles/10218384)
VSCODE 安裝 python 相關套件

VSCODE 安裝 terminal 相關套件

開啟 VSCODE 的 terminal 並選擇 cmd 
ctrl + ~

建立一個python 3.7環境
```gherkin=
$ conda create -n py37 python=3.7
```
切換至剛剛建立的環境
```gherkin=
$ conda activate py37
```
可看到指令列最旁邊多出py37
VS_CODE:

安裝相關套件
若下面版本過舊請自行更新
```gherkin=
$ pip install shortuuid
$ pip install pyinstaller
$ pip install numpy
$ pip install opencv-python==4.0.0.21
$ pip install opencv-contrib-python==4.0.0.21
$ conda install pyqt
```
若要移除opencv更新版本可參考如下指令
```gherkin=
pip uninstall -y opencv-contrib-python
pip uninstall -y opencv-python
```
若是要裝到opencv最新版本可參考如下指令
```gherkin=
pip install opencv-python --upgrade
pip install opencv-contrib-python  --upgrade
```
vott_tracker.py測試指令
```gherkin=
 python vott_tracker.py ../../../Drone_Target/vott_source_info.tmp ../../../Drone_Target/vott_target_path.json
 v0.04之後的版本請用
$ python vott_tracker.py ../../../Drone_Target/vott_source_info.json ../../../Drone_Target/vott_target_path.json
```
###### tags: `setup`, `VoTT`, `Python`