--- title: 使用 cygwin 64 在 win10 執行git 和repo工具(棄用) disqus: hackmd --- 使用 cygwin64 在 windows10 執行git和repo工具(棄用) === [TOC] ## 1. 在windows10 安裝 cygwin64 --- ### (1) 安裝說明 [cygwin網址](https://www.cygwin.com/) ![](https://i.imgur.com/v4n3eCq.png) 一直按下一步,除非中間過程你要改路徑,直到選擇package來源 ![](https://i.imgur.com/RlAIylP.png) cygwin必要套件安裝,請照造下圖依序安裝 參考此[網站](http://yandonghua.blogspot.com/2010/08/cygwinrepo.html),將要裝的套件裝好 [](https://i.imgur.com/J6JGU2u.png) 其中 curl 內建package已經有勾選,按照下圖安裝其他套件, View選擇Full,搜尋套件後,將要安裝的項目改成keep ### (2) libreadline7 安裝 ![](https://i.imgur.com/9dFYTT2.png) ### (3) git 安裝 ![](https://i.imgur.com/VBFTJgn.png) ### (4) 文字編輯器 安裝 這邊我習慣用vim ![](https://i.imgur.com/lmCq6tH.png) ### (5) tig 工具(可視化git commit) 安裝 ![](https://i.imgur.com/8jPPzjw.png) ### (6) python 安裝 20201101更新 請安裝python2 and python3 ![](https://i.imgur.com/DSn1FUg.png) ### (7) openssh 安裝 ![](https://i.imgur.com/KgoSQx7.png) ### (8) 壓縮解壓縮工具 安裝 ![](https://i.imgur.com/ZzEOSld.png) ### (9) pip 安裝完成 ![](https://i.imgur.com/PUcavIz.png) ### (10) 安裝完成 ![](https://i.imgur.com/rVzCg6G.png) ## 2. 設定以避免無法執行在Cygwin上下載的安裝檔 - 權限錯亂 [參考文件](https://www.evernote.com/shard/s580/client/snv?noteGuid=297b9ea2-7396-4f92-a210-ad2705e09ae5&noteKey=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 ``` ![](https://i.imgur.com/lHheADK.png) ## 3. 在 cygwin64 安裝 repo 套件 --- > repo 套件是用來管理專案用的,假設一個專案有許多資料夾,每個資料夾都有自己的git,我們不可能一包一包去git clone下載,此時用repo管理是最適合不過的 [安裝repo參考網址](https://juejin.im/post/6844904057421742094) ### (1) 打開cygwin,創建放置repo套件的資料夾 ```gherkin= 進到家目錄後,創建一個叫做bin的資料夾 $ mkdir bin ``` ![](https://i.imgur.com/YrCjDB6.png) ```gherkin= 這是你家目錄的路徑,這個名字應該是會使用電腦帳號的名字,我也不知道的啦 $ pwd ``` ![](https://i.imgur.com/HwhsnNC.png) ```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 ``` ![](https://i.imgur.com/JHW8ml0.png) > 注意以下的步驟若你沒有將SSH PUBLIC KEY交給學長,就無法進行推commit到GITHUB遠端!!!! 所以以下的測試流程會以*HTTPS*網址為主,若你確認KEY已經申請,則可以改成*SSH*下載,這樣推CODE不用輸入帳密,因為GITHUB遠端認得你這台電腦 ![](https://i.imgur.com/MThdnr9.png) ## 4. 產生 SSH key 並交給學長 --- :::info 當上述都完成後,要先產生ssh key,因為之後的測試,再推commit進遠端需要權限!! 這邊的概念是,遠端的github如何知道 使用者(你) 是否有權限對這個倉庫做修改上傳?? ```gherkin= github的機制是,看看這個github遠端帳號有沒有你這台電腦的key,判斷行為如下: 有: => 代表這個github遠端帳號認識你這台電腦,可以讓你做修改上傳 沒有: => 代表這個github遠端帳號根本不知道你是誰,所以你無權限做修改上傳 ``` ::: ### (1) 先確認win10有沒有安裝OPENSSH CLINET 請依照下圖確認 ![](https://i.imgur.com/XXGCn5R.png) ![](https://i.imgur.com/bh5R00e.png) ![](https://i.imgur.com/rv697ty.png) ```gherkin= 如果有裝OpenSSH用戶端,就可以執行下一步,若沒有安裝,請按新增功能增加 ``` ![](https://i.imgur.com/eW9t81M.png) ### (2) 打開cygwin,然後輸入以下指令產生key ```gherkin= $ ssh-keygen ``` ![](https://i.imgur.com/GoaEehH.png) ### (3) 將public key交給學長吧 ```gherkin= 首先到key的位置 然後使用ls查看 $ cd ~/.ssh 這邊注意路徑~符號是代表你的家目錄,所以等同於/home/帳號名稱/, 注意在cygwin上都是使用linux base的符號路徑,與windows區別如下 ### linux 路徑符號使用 / ### windows 路徑符號使用 \ $ ls 若要查看有沒有隱藏資料夾使用下列指令 $ ls -a ``` ![](https://i.imgur.com/dc4zVEz.png) ```gherkin= 觀察id_rsa.pub裡面的內容 $ cat id_rsa.pub ``` ![](https://i.imgur.com/aqaGEIm.png) ```gherkin= 再來將這個檔案複製到d槽,或是其他路徑 $ cp id_rsa.pub /cygdrive/d/ 將這個檔案壓縮如下,交給學長 ``` ![](https://i.imgur.com/fr6P3Jl.png) ![](https://i.imgur.com/JMNEIzy.png) ```gherkin= 學長收到後會把這個key加到github遠端,如下圖, 代表遠端的github帳號已經可以認得你這台電腦了, 所以你這台電腦就有修改這個倉庫的權限了!! ``` ![](https://i.imgur.com/XclpWab.png) ## 5. git 測試 --- ### (1) 回到家目錄後,創一個NTUT資料夾並進入 ```gherkin= $ cd ~ $ mkdir NTUT $ cd NTUT ``` ![](https://i.imgur.com/xC1dU29.png) ### (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檔案 ``` ![](https://i.imgur.com/GDGc0bS.png) ### (3) 使用tig 看看現在有哪些commit ```gherkin= ### 完整指令查詢請下 $ man tig ### 常用指令如下 進入commit: enter 離開: q 完整顯示commit內容: d 往下: j 往上: k 搜尋: /search_name ``` ![](https://i.imgur.com/ddz7W3D.png) ### (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 ``` ![](https://i.imgur.com/8jDZ5sX.png) ```gherkin= $ git add README.md  (嚴禁使用git add * ) 再觀察一次檔案狀態 $ git status ``` ![](https://i.imgur.com/fejN6Nt.png) ```gherkin= 使用tig 觀察 $ tig ``` ![](https://i.imgur.com/87cUoqC.png) ### (6) 將add後的檔案提交(commit)到本地倉庫 ```gherkin= $ git commit 若是有裝vim 預設編輯器會以vim 套件來編輯,紅色框為新增的提交說明 這裡很重要,可以提醒這個commit的功能為何,將來找bug或找相似的功能會非常好用 編輯後存檔離開 ``` ![](https://i.imgur.com/ErYFdsC.png) ```gherkin= 在看一下git狀態,因為已經提交到本地倉庫,所以目前工作區為乾淨的 $ git status ``` ![](https://i.imgur.com/9yfImtJ.png) ```gherkin= $ tig 可看到目前增加的commit 的內容,包括何人修改,修改內容與提交說明 ``` ![](https://i.imgur.com/9JyqWfC.png) ### (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) ![](https://i.imgur.com/bEH32Sk.png) ```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 ``` ![](https://i.imgur.com/PFwiVa1.png) :::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,放錯圖 ``` ![](https://i.imgur.com/uSmDsKb.png) ```gherkin= 關於 ~/bin/repo start master --all 驗證 這是代表本倉庫的分支要連結到遠端的哪個分支.由於目前我這邊沒有設定任何分支,所以以master主分支為準 可以使用如下指令觀察 $ cd CVTRK/WIN10 $ git branch -a 可觀察到目前連結到的是master分支 ``` ![](https://i.imgur.com/esyZz0w.png) ### (2) 觀察此專案內容 ```gherkin= repo sync 後可看到兩包資料夾,注意若是以後只是要從遠端更新專案, 只需要下下列指令,就會從遠端將資料更新到本地端 $ ~/bin/repo sync 下載後可看到兩包資料夾 $ ls ``` ![](https://i.imgur.com/qr0CKpd.png) ```gherkin= 若是要查有沒有隱藏資料夾使用下列指令,可以看有一包.repo $ ls -a ``` ![](https://i.imgur.com/mH7rbDk.png) ```gherkin= 進入.repo我們可以看到各自的來源是從哪個github倉庫過來的 $ cat .repo/manifest.xml ``` ![](https://i.imgur.com/Z6Gkv1p.png) ![](https://i.imgur.com/lyafrZT.png) ```gherkin= 本地端倉庫路的確如上圖綠線設定 ``` ![](https://i.imgur.com/kY8bJbd.png) ## 7. 安裝python套件 ### (1) 打開cygwin64 安裝shortuuid、opencv-contrib-python 2021不再支援pip指令,安裝完成後請開啟cygwin並出入下列指令更新pip $pip3 install shortuuid 會出錯請依照log提示更新pip ![](https://i.imgur.com/KUO2Pz0.png) ![](https://i.imgur.com/ukcOh88.png) --- ## 8. 測試使用Anaconda來安裝Python套件包(測試完成) https://hackmd.io/@NTUTVOTT/SJbese-Iv [Anaconda下載](https://www.anaconda.com/products/individual#windows) ![](https://i.imgur.com/oNdR0o3.jpg) 增加環境變數至系統 選取環境變數 ![](https://i.imgur.com/jnpx7Hi.png) ![](https://i.imgur.com/UyTcomc.png) [環境變數參考網站](https://ithelp.ithome.com.tw/articles/10218384) VSCODE 安裝 python 相關套件 ![](https://i.imgur.com/AQjFr69.png) VSCODE 安裝 terminal 相關套件 ![](https://i.imgur.com/yQVzDmd.png) 開啟 VSCODE 的 terminal 並選擇 cmd ctrl + ~ ![](https://i.imgur.com/qRxeX8h.png) 建立一個python 3.7環境 ```gherkin= $ conda create -n py37 python=3.7 ``` 切換至剛剛建立的環境 ```gherkin= $ conda activate py37 ``` 可看到指令列最旁邊多出py37 VS_CODE: ![](https://i.imgur.com/WOagSGF.png) 安裝相關套件 若下面版本過舊請自行更新 ```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`