Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Sunday, 20 October 2019

Git 對 Binary File (Excel, Photoshop Designs, Executable Files) 進行追蹤版控

Preface

Git 較常用於管理文字檔案,對於Binary File的版控管理,可以用lfs這個指令來進行管理

Tutorial

可以用下列的Git 指令對Repo進行初始化
$ git lfs install
接著可以把Binary File檔案加入進行追蹤
$ git lfs track "*.xlsx"
若是要修改追蹤的Binary File,可以直接對.gitattributes進行修改

Friday, 27 April 2018

使用 CLI 呼叫 IntelliJ 開啟指定路徑底的 Project

Preface

對於長時間使用 terminal 的使用者來說,能夠像是 Sublime text 或者是 Atom 一樣,在 terminal 中直接使用指令開啟指定的檔案或專案,可以說是一大福音。這裡教大家使用現成其他開發者寫的 bash ,打造一個 idea 指令來呼叫 IntelliJ 開啟指定路徑下的專案。

Tutorial

1. 下載 bash script

將 chrisdarroch 的 idea bash 下載下來。(這個版本只支援 IntelliJ)

Big thanks to chrisdarroch!!

* IntelliJ by chrisdarroch

2. 加上執行權限

$ chmod +x idea

3.  把 bash 指令登入到系統上

有兩個做法:
  1. 將 bash 的路徑加到 bashrc 這個檔案上(較推薦)
  2. 將 bash 檔案放到 /bin 路徑底下
將 bash 的路徑加入到 bashrc 的做法可以執行下列指令
//$PATH:後方可以改為你指定的路徑,這裡舉例使用'.'
$ echo "PATH=$PATH:." >> ~/.bashrc

4. 完成

跟我這樣下。如此一來 IntelliJ 就會自動打開該目錄底下的專案。
$ idea <project-path>

Wednesday, 25 April 2018

Git 移動目前修改的東西到另一個分支上

Preface

有時開發的時候,會發生在錯的分支上進行修改,這時可以利用 stash 來進行搬動剛剛所做的修改。下面就做一個假設我在 master branch 上進行了開發,想要把剛剛所做的改動移動到 develop branch 上。

Tutorial

//先確認目前所做的改動
$ git status
//使用 stash 儲存起來,save 後面所帶的參數為自定義的 stash 註記
$ git stash save these changes are going to apply on develop branch
//目前的改動 stash 起來後就可以切換到 develop branch 上了
$ git checkout develop
//若沒有暫存其他的東西的話可以直接用 stash pop 來還原剛剛暫存東西
$ git stash pop

Saturday, 28 October 2017

Git 版本命名

Preface

先前已經有一些筆記介紹 Git 的開發流程以及如何操作,這篇則是要介紹,如果一些已經確認要進到 Mater branch 的 commit 如何為其標上版號以利進行發布。

Tutorial

首先可以先參考語意化的版本命名(Semantice versioning)的命名規則。接著再進行以下的操作進行標上版號。
//對當前的 commit 標上版號
$ git tag -a v0.0.x
//顯示所有的版號
$ git tag
//顯示對應版號其 commit 的詳細資訊
$ git show v0.0.x

Wednesday, 23 August 2017

Git 設定個人資訊

Preface

當使用 Git 進行版本控制時,完成 local commit 後,需要將 commit push 到 remote repository 的時候需要將個人的 profile 一同 push 到 remote repository 前,需要先設定個人的 profile。

Tutorial

可以透過下面兩行 command line 去進行設定 name 以及 email。
$git config user.name = "YOUR NAME"
$git config user.email = youreamil@yourdomain.com
當然也可透過 --global 選項進行全域變數的設定。
$git config --global user.name = "YOUR NAME"
最後可以使用 --list 進行所有的 config 設定
$git config --list
完成設定 profile 後以後 push commit 到 remote repository 的時候就會順便帶上個人的資訊了。如果是以 Github 為例, Github 會拿你所設定的 user.email 去跟帳號做連動。也就是 profile 上的 email 必須與你 Github 的帳號一致。此時 Github 才會把你每次 commit 的 code 列入 account activity 的計算。

Saturday, 15 April 2017

SSH 設定 config 使用不同的 Key 對應不同的 Server

Preface

在工作的時候常常會遇到公司的 codebase 要設定 SSH 之後才能把自己的程式碼 commit 上去,可是這時候又會遇到自己的常常在使用的 codebase 可能是 Github, Gitlab......等等其他的服務。如果需要常常將 SSH key 作切換的話蠻麻煩的。所以這時候可以透過設定 config 讓 SSH 自動幫你切換 SSH key。

假設一下情境,目前有兩個 Git Repository: repoA (公司專案連接到公司的 codebase), repoB (個人的專案連接到個人的 Github)。透過設定檔告訴 SSH 當 repoA 要進行 commit 的時候需要連接到公司的 codebase 這時候透過 SSH config,SSH 就可以自動的幫你切換對應的 SSH key。要進行 commit repoB 的時候反之亦然。

Tutorial

首先切換到 SSH 的路徑底下
$ cd ~/.ssh/

接著使用 ssh-keygen 產生兩組 key,記得在產生 key 的過程中需要設定 key 的名稱,記得要設定成你自己容易區分的名字。例如: work_id, personal_id
$ ssh-keygen -t rsa -C "your comment"

接著使用文字編輯器在 SSH 的路徑底下建立一個叫做 config 的檔案
$ vim config

//Config 內容如下

# GitHub.com server
Host Github
    HostName github.com
    User github_user
    IdentityFile ~/.ssh/personal_id

# Work codebase server
Host Your company name
   HostName 127.0.0.1 #Your id address of your company codebase
   User your name
   port 7999 #According the setting of your company codebase
   IdentityFile ~/.ssh/work_id

設定檔也準備完成了之後,使用 ssh-add 把 work_id 和 personal_id 加入
$ ssh-add ~/.ssh/work_id
$ ssh-add ~/.ssh/personal_id
使用 ssh-add -l 功能來檢查哪些目前有哪些 key 已經被加入了
$ ssh-add -l
別忘了把自己新產生 SSH key 註冊到 Github 以及公司的 codebase上。
$ pbcopy < ~/.ssh/work_id.pub
接著你就可以試著從自己的 Github 上以及公司的 codebase 上抓一個 repo 測試一下連線是否有成功。

References

Wednesday, 12 April 2017

Git 使用 stash 功能來暫存目前修改的狀態

Preface

目前個人使用 Git 遇到會需要使用 stash 功能情境為,目前的 feature branch 開發到一半,但是有一個臨時的 hotfix 需要先進行修改。手邊目前的 feature branch 功能也還沒有完成到適合 commit 的狀態。想要在不進行 commit 的狀態下建立一個新的 hotfix branch 切換過去這時就需要先使用 stash 暫存起來。這樣就可以進行  branch 的切換了。

Tutorial

首先在目前的分支下使用 status 來確定,已經有檔案修改。
$ git status

確定目前有修改的檔案後,使用 stash 功能把目前的狀態暫存起來
$ git stash

接著再用 staus 確認 branch 狀態,你應該會發現剛剛所有做的修改都不見了
$ git status

接下來你就可以任意地切換分支了。或者是你可以用 stash list 來確認目前有暫存起來的狀態
$ git stash list

等待 hotfix 完成或者是其他的功能完成之後,要把暫存的狀態還原回來,可以透過 stash list 找到 stash 狀態的 index 以及可以確認相對應的 branch,切換到對應的 branch 上使用 stash apply 再加上想要回覆的暫存狀態就可以了
$ git stash apply stash@{0}
//stash@{number} 是 stash index 可以在 stash list 裡面找到

Monday, 6 February 2017

Git 解決合併分支時的檔案衝突 Resolve conflicts while merging branches

Preface

上一篇的筆記有提到如何進行 Git 分支合併,但在多人協同開發的環境底下,往往一定會遇到檔案發生衝突的狀況。這裡教大家單純的使用 Git 的 checkout 功能來解決衝突。

Tutorial

當你使用 merge 指令去合併分支的時候,有衝突發生時,Git 會要求使用者解決衝突,才能夠完成 merge 的動作。當 Auto merge 沒有成功時候會跳出警告的訊息。

解決衝突的三個方法:

  1. 直接打開該檔案進行修改
  2. 使用 checkout --theirs, checkout --ours 來直接選定要改為哪個 branch 上的版本

1. 直接打開檔案進行修改

這個方法很直覺,可以避免掉很多錯誤。因為你必須逐行的處理衝突的檔案。

修改完有衝突的檔案後,可以直接循 commit 的流程來完成 merge 的動作
$ git add --all
$ git commit

2. checkout --theirs, checkout --ours

這是一個比較快速的做法,可以執行 status 指令來查詢

$ git status

modified a.file
modified b.file

both modified c.file
此時 c.file 被標記為 both modified 的檔案,c.file 就是發生衝突的檔案,此時要確認哪個分支上的版本是最新版的。這裡假設 feature branch 上的 c.file 是最新版的。則執行下列指令

#請注意 --ours, --theirs 指的是哪個分支上的 c.file
#我們已經切換到 develop branch 上
#所以 --ours 指的是 develop 上的 c.file
#欲使用 feature branch 上的 c.file 所以要使用 --theirs

$ git checkout --theirs c.file
$ git add c.file
此時會我們再用 status 確認一次目前分支的狀態會得到下列的結果

$ git status

modified a.file
modified b.file
modified c.file
c.file 也被標記為 modified 之後,就可以進行 commit 了
$ git commit -a

Friday, 13 January 2017

Git 合併分支 Merge feature branch to develop branch or master branch

Preface

根據 Git Flow 開發流程,這裡記錄的是最後一步,功能開發完成後要將 feature branch 合併回 develop branch 或 master branch。這裡將合併的指令操作流程記錄下來。

Tutorial

首先,確認要合併 feature branch 的狀態

$ git status

若還有些檔案沒有 commit 的,先做 commit 的動作

$ git commit -a

完成 commit 的動作後,再切換到要將 feature branch 合併 develop branch or master branch

$ git checkout <develop or master> 

切換至 develop branch or master branch 之後,從遠端將最新的檔案更新到 local repository 上

$ git pull origin <develop or master>

下一步,就可以將 feature branch 合併到 develop branch or master branch 上了 。這裡先暫時不介紹如何解決 conflict 的問題。

$ git merge <branch-name>

如果在 merge 執行的時候有檔案衝突產生,請參考 Resolve conflicts 筆記。最後完成合併 (merge) 之後,就可以將合併完的 develop branch 或 master branch 上傳到遠端 Repository

$ git push origin <develop or master>

以上就是如何合併 branch 的流程,下一篇筆記就會介紹如何解決合併時的檔案衝突 (conflict)

Saturday, 7 January 2017

Git 回復 commit 為 staging

Preface

先前已經有介紹過 Git flow 開發流程,Git 的開發過程中會經常地使用 commit 的這個動作。如此一來一定會很常遇到要把最近一次的 commit 回復到 staging 進行重新修改,以利於把這一系列有相關的修改統整為一次的 commit。便於 code review 的進行。

Tutoria

  1. 在 Local Repository 上的 Git 開發歷程
  2. 修改程式檔案
  3. 將該檔案的狀態改變為 Staging (準備進行 commit)
  4. 將 Staging 的檔案進行 commit
  5. 撰寫 commit message 記錄有修改的部分
  6. 完成 Local Repository 的 commit

這裡要介紹透過下列的指令即可從步驟6. 回到步驟3. 以利於進行其他檔案的修改。

git reset --soft HEAD^

若只是要進行 commit message 的修改的話,可以參考一下 Git message 編輯修改

Tuesday, 27 December 2016

Git 編輯修改 commit message

Preface

在使用 Git 或多或少應該會遇到這樣的狀況,也就是 commit message 少寫了一些資訊,造成了團隊其他成員的困擾。此時養成紀錄完整的 commit message 是很重要的。如果有時候難免會發生,這裡就簡單的記錄一下,編輯修改 commit message 的方法。

Tutorial

首先可以使用 amend 選項去針對 local 上最近一次的 commit message 進行修改

$ git commit --amend

如果你還沒有將這一次的 commit 上傳到遠端主機上的 repository 的話,做了以上的修改即可。反之,如果你要進一步的將編輯修改後的 commit message push 到遠端主機上的 repository  的話,可以使用以下的指令

$ git push --force-with-lease <repository> <branch>

加上 --force-with-lease 是為了確保在你 push 這一次的 commit message 之前已經有人先上傳了新的 commit 造成了其他人出現一些錯誤。

Saturday, 24 December 2016

Git Flow 開發流程

Preface

開始工作上班之後,必須照著公司軟體開發流程走。每間公司可能會有不同的軟體開發流程,所利用的軟體版本控制工具也可能不同。這裡介紹的軟體版本控制工具為 Git。所採用的流程類似 Git Flow。

1. 開發人員會先從原本的 master branch 或 develop branch 開一個新的 Feature branch。
2. 接著切換到 Feature branch 上進行開發。
3. 待功能開發完成、通過測試再將 Feature branch 的程式碼 merge 回去 master branch 或 develop branch。 (合併 merge 參考筆記)

Git Developing Flow

以下為個人的操作筆記,因為第一次使用 Git ,寫點筆記避免我忘記了。

建立新的 feature branch

$ git branch <branch-name>

接著用下列的指令,檢視 local repository 上所有的 branch

$ git branch

接著用 checkout 指令切換到剛剛所建立的 branch

$ git checkout <branch-name>

切換過去之後,可以在新的 branch 上面進行開發,而不會去修改到 master。修改之後可以用 status 指令去檢查,目前的 branch 有哪些檔案做過修改了。

$ git status

可以藉由 status 所顯示出來有做過修改的檔案,使用 add 的指令將修改過的檔案改變為 stage 狀態。 轉變為 stage 狀態的檔案為準備可以 commit 確認修改的檔案。 

$ git add <file-path/file-name>

接著用 commit 確認修改。

$ git commit <file-path/file-name>

剛剛所做的修改,都是在 local repository 所做的修改。接著用 push 的指令,把 local repository 所做的所有改變上傳到 remote repository 的指定 branch。指定的 branch 也就是我們剛剛所建立新的 feature branch。

$ git push origin <branch-name>

開發時所做的改變,只會在你所建立的  feature branch 發生改變。並不會去影響到 master branch。當你的 feature branch 通過一些軟體開發的測試之後,才能夠 merge 到另一個開發的整合 branch 進行完整的系統測試。通過完整的系統測試之後確認所有的功能整合起來能夠正常的運作之後,再把這個版本發佈為公司未來要發佈到上線的產品 (Production)

Sunday, 27 September 2015

Hadoop MapReduce 開發環境快速建立(Cloudera CDH)

Preface

這篇文章適合開始學如何使用 Java 進行開發 Hadoop 的 MapReduce 程式的人。主要內容在於介紹如何建立Hadoop,以及開發環境IDE(Integrated Development Environment),如何建立第一個專案。

系統環境:Windows
軟體需求:虛擬軟體(Ex: VMware, Virtual Box) 、CDH QuickStart VM
硬體需求:建議雙核心以上的CPU、記憶體8G以上

Tutorial

下載對應虛擬軟體的 CDH QuickStart VM ,再用對應的虛擬軟體啟動虛擬機器即可。

啟動虛擬機器後,Hadoop 的相關服務都已經啟動了。接下來的操作可以參考這個Youtube影片或者是以下的圖文敘述。

啟動桌面大家都耳熟能詳的 eclipse。

會看到已經有一個名為"Trainer"的專案,點選右鍵複製、貼上。


 接著為這個新的專案命一個新的名字 。

接著在這個路徑"<project name>/src/(default package)"下可以看到四個檔案StubMapper, StubReducer, StubDriver, Stubtest,這四個檔案可以透過點擊右鍵來重新命名。

目前Hadoop新的MapReduce API運作架構如下圖所示:

Driver裡面必須包含java程式的進入點main,接著由main去控制要直行哪一個Mapper、Reducer。

接著幫專案加入hadoop的api套件,這樣Developer所開發的MR program才可以順利的在 Eclipse Console執行。

先刪除原先已經加入的套件
對著專案點右鍵 > 選擇Properties > Java Build Path,接著就可以看到目前已經加入的套件了,全選然後刪除。

加入Hadoop的套件
點選Add External JARs,接著把下列兩個路徑裡的Jar加進來
~/usr/lib/hadoop/client-0.20
加入全部的Jar

~/usr/lib/hadoop/

hadoop-annotations.jar
hadoop-auth.jar
hadoop-common.jar
完成之後就可以,回到專案的/src路徑底下進行撰寫Mapper、Reducer、Driver的程式了。接著將測試分析的資料放到專案路徑底下,加入執行的參數(Arguments),就可以執行專案了。

Saturday, 15 November 2014

執行 Hadoop MapReduce 字數統計 (Word Count)範例程式

Preparation

要執行MapReduce程式之前,先安裝好Hadoop並將服務啟動,接著在準備好要進行字數統計的資料,可以自行新增或自己上網找,這裡我會提供三個文件的載點,請下載Plain Text UTF-8。

Step by Step

首先,將剛剛下載來的三份文件放在 input 這個目錄底下
$mkdir input_txt
$mv pg20417.txt pg4300.txt pg5000.txt input_txt
接著把整個 input 目錄放到Hadoop File System (HDFS)
$hadoop fs -copyFromLocal input_txt user/hduser/input_txt
$hadoop fs -ls
-rw-r--r--   1 hduser supergroup     710771 2014-10-03 16:13 input_txt/pg20417.txt
-rw-r--r--   1 hduser supergroup    1573150 2014-10-03 16:13 input_txt/pg4300.txt
-rw-r--r--   1 hduser supergroup    1423803 2014-10-03 16:13 input_txt/pg5000.txt
最後一步就是執行Word Count
$hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /user/hduser/input_txt /user/hduser/output_txt

output_txt 可以不用事先建立,在完成了這個MapReduce Job 之後Hadoop會自己建立,可以到Hadoop 的 WebUI 確認輸出的結果

Wednesday, 8 October 2014

Hadoop copyFromLocal: `/user/hduser/ ': No such file or directory 找不到路徑的問題

Preface

當安裝好Hadoop之後,想要簡單的測試一下字數統計(WordCount)的MapReduce,必定要先準備好資料,放到Hadoop的HDFS裡面,第一次進行將檔案放到HDFS的時候卻遇到了"copyFromLocal: `/user/hduser/gutenberg': No such file or directory"。發生這個問題是因為HDFS並沒有你當前使用帳戶的資料夾,所以你要先執行一個指令,為你當前使用的帳戶新增

Solution

這非常的簡單,執行以下指令即可
#若你所使用的帳戶不是hduser,請自行修改指令  $ hdfs fs -mkdir -p /user/hduser

Tuesday, 11 September 2012

Linux USB隨身碟開機

你需要了解,如果有一天,電腦被充斥在網路上的病毒弄掛了,死在那邊不動,你要怎麼辦?裡面一堆重要的資料,在不能開機的情況下,你要怎麼救回你的資料?將一個Live作業系統安裝到你的USB裡面,在使用那隻USB隨身碟開機,把重要的資料拿回來!這裡要安裝的是Linux 作業系統!

事前準備

1. Live Linux USB Creator 下載網址:Here


2. Linux系統的ISO映像檔
*其實用這套Live Linux USB Creator 來製作Live 的隨身碟式系統非常的方便,iso映像檔可以可無,因為它可以幫你找到mirror來下載ISO映像檔!可說是非常的方便又快速,外加"無腦"

3. 5分鐘的時間 =)

安裝步驟

1. 將Live Linux USB Creator 下載下來並且安裝,執行程式後,視窗的Step1的地方就是要你選擇你的USB。

2. Step2選擇你電腦中ISO映像檔的位置,由左往右,第一個是ISO檔的來源,當然你已經下載好了,就使用這個選項,找出你的ISO檔路徑。如果有燒錄在CD的話,就選擇第二個。哇!糟糕,你都沒有的話,也懶得自己去找,那選第三個吧,他就會有選單讓你選擇想要下載的Linux ISO映像檔的系統版本,以及不同的套件,推薦使用Ubuntu的,適合新手摸索

3. Step3你要將多少的隨身碟空間釋放給系統使用,如果不選擇就是Live的模式,每次開基的時候,他都會去還原初始化你的系統,當然這樣就不怕玩壞了,但是系統不會將你的個人設定儲存起來,至於要給多大的空間,我覺得3GB已經綽綽有餘了。

4. Step4設定幾個安裝時的選項
*第一個,他會幫你把在你USB隨身碟上新增出來的檔案,隱藏在你的隨身碟上面。

*第二個,他會幫你格式化隨身碟,注意他會將你隨身碟原本的資料全部銷毀

*第三個,如果你想要執行雙系統的話,勾選起來吧,他會幫你安裝Virtual Box你可以在Windows下,開啟Virtual Box玩玩你的Linux!

5. Step5完成設定了,按下閃電的圖案GO~!稍待片刻,去喝個飲料大概就好了

6. 重新開機,進入你的電腦BIOS,將USB設為開機的第一順位,就可以進入Linux了!