What Is Software Design?

程式設計不是 “building software”,而是 “designing software”。

Is Design Dead?

軟體系統的設計是演進來的,不能一步到位,而是要藉由憑繁與使用者互動得到的回饋來修改系統設計。

Programming is Gardening, not Engineering

與其把程式設計比喻成蓋房子,實際上更像是園藝。

Orthogonality and the DRY Principle

所有程式設計活動其實都是維護,因為絕大部分的時間都在改code,寫一點改一點。即使是新專案,也很快需要回頭作修改。

顯示具有 git 標籤的文章。 顯示所有文章
顯示具有 git 標籤的文章。 顯示所有文章

2013年11月7日 星期四

git - 在 master 上面加上新 tag

git - 在 master 上面加上新 tag

git tag -a (v1.3branch) -m "Release v1.3 Tag"



====================================

git tag v2.4.0  <===給tag

git push --tags <==tag push 上git

2013年9月27日 星期五

git commit 排除掉不需要的資料

在git 裡面需要commit 最笨的方法就是 git add . 的指令會把所有東西都commit 上去

有些檔案我們不希望加入版本控制的追蹤,例如說Database的schema或是一些log檔,這時候你可以將他們加入 .gitignore 中來讓 Git 忽略他們,使用編輯器來打開你的 .gitignore 檔案。

利用這樣的方法  再搭配 git commit -a 來做commit的動作可以避免資料雜亂與龐大~!


2013年9月25日 星期三

git 自己建立一個新的 Repository

step1.
到你要存取的資料夾下


git init

這時你就會看到 Git 告訴你說已經在這邊建立好一個新的 Git Repository。


Clone(複製)別人的 Repository



將他複製起來後到你的目錄下輸入 git clone
$ https://github.com/JOHNBASS/Sports-stars.git
如此便會將這個 Git Repository下載到我們的資料夾, git clone 預設會將下載的 git 存成一樣檔名的資料夾,如果你要更改成別的名稱的話只需要在網址後面加上你想要更改的名稱即可,像是:
$ https://github.com/JOHNBASS/Sports-stars.git test1
這樣子下載下來的 Repository 的名稱就會從原本的 Sports-stars 變成 test1 了。

參考資料:http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/

Git alias 的功能 縮短指令

Git 也有提供 alias 的功能

例如你可以將 git status 縮寫為 git stgit checkout 縮寫為 git co 等,你只要這樣設定

git config --global alias.st status

這樣一來只要打 git st 就等同於打 git status 了。

Git 預設輸出是沒有顏色的,我們可以讓他在輸出時加上顏色讓我們更容易閱讀:


git config --global color.ui true

參考文獻:http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/

2013年7月2日 星期二

git merge 方法

要將檔案merge起來


先跳到要merge的branch_a

將指定的branch_b合併到現在的所在的branch_a
git merge --no-ff branch_b

再將branch_a上傳到遠端
git push origin branch_a

獲得遠端的branch到本地

git fetch origin branch(遠端的)


git merge時 衝突..


第一個A的內容
<<<<<<< 
你加的C內容
=======
第二個A的內容
後面BB的內容
>>>>>>>

<<<<<<< 跟 >>>>>>> 標記描述了產生衝突的程式碼,其間以=======作為區隔,第一個部份就是你新加的內容,第二個是遠端的內容,你一看就會知道這邊有衝突,於是你要決定怎麼合併它們,手動更改檔案,處理好衝突,先Commit接著Pull再看看有沒有衝突發生,若還有衝突發生,就要再手動去檢查產生衝突的檔案,再Commit,然後再Pull看看。



git - branch 與 branch merge


1.先切換到要合併的主幹 branch
git checkout branchA
回應: Switched to branch 'branchA'

2.git merge --no-ff branchB

3.刪除 branchB 的分支
git branch -d branchB

4.在重新上傳資料 branchA
git push origin branchA



合併操作(merge)


git merge branch名稱 合併指定的 branch 到目前的 branch。
git merge branch名稱 --no-commit 合併指定的 branch 到目前的 branch 但是不會產生合併的 commit。
git cherry-pick SHA 將某一個 commit 的內容合併到目前 branch,指定 commit 是使用該 commit 的 SHA 值,例如 git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544


git 指令


上傳

git status
觀察現在git的情況

如果有資料未更新
git add .
加入所有資料到本地
git commit -m "訊息"
為要上傳的資料寫上訊息
git push
將東西push到遠端

git add . 不會把刪除的檔案也放入 status
git add -u 才會把刪除的檔案放入



@不要全部都push上去

git commit -a

在輸入 訊息
:wq
存檔
最後在git push


history  列出以前打過的指令

git reset --hard 回到最後commit的點上

branch的新增


先在本地new branch
git branch (branch_name)

接下來看是否已經在本地產生了branch
git branch

看一下遠端是否有重複的branch
git branch -r

將branch傳到遠端
git push origin (branch_name) 

刪除branch


刪除本地branch
git branch -d (branch_name)

刪除遠端的branch
git push origin (branch_name)


git - 基礎指令

轉換本地branch
git checkout (branch_name)

Clone: 會把遠端的repo整個專案抓下來,放在目前路徑下的新目錄中。(所以不需要先把新目錄建立成Repo,就可以整包抓下來,隨包附上.git目錄)

Pull: 會把遠端的repo整個專案抓下來,跟你目前所在的Repo及所用的Branch作合併(Merge),此指令等同Fetch+Merge。

Fetch: 會把遠端的repo整個專案抓下來,但不跟你目前所用的branch合併,而是放在本地中的另一個Brance(remoteBranch)。



git - 需要pull 遠端的別人的 branch時


git pull origin/(branch name)
或是用git x REMOTES => origin 找到自己要的branch 點右鍵 Create branch that tracks origin/(branch name)


git - pull

要pull遠端

git pull origin (branch name)


git - 尚未commit 前想要跳branch 系統告知要先commit 解除更新資料


git status
看有哪些更新的資料
git reset HEAD^

ex:Unstaged changes after reset:
M ThermoDock_passionbean.xcodeproj/project.xcworkspace/xcuserdata/john6812711.xcuserdatad/UserInterfaceState.xcuserstate

git checkout (ThermoDock_passionbean.xcodeproj/project.xcworkspace/xcuserdata/john6812711.xcuserdatad/UserInterfaceState.xcuserstate)

git checkout (branch name)想要跳往的branch


git -reset


首先指令下 git reset "某次 commit 的 SHA 值",這裡注意,給出的 SHA 值就會回到那次 commit 結束後的狀態。
例如 git reset a8b5a0afea1e1f5faccda4a698c0002bdcc7bf892

這樣 commit 的狀態就會回到該時間點,但是修改的內容還是目前最新的狀態,因此 git status 會發現這段時間 modified 過的檔案。
接著下 git checkout -f ,checkout可以幫你把更動過的檔案,回到最後一次 commit 時的狀態,所以檔案的狀態就會變成跟倒回的時間點相同。

最後下 git reset original/master,將 commit 的位置直接指向最新的地方,然後 commit 並 push ,就可以看到 repository 又回到你指定時間點的狀態,而且中間變動過的 commit log 也都還在!
注意一點,commit 指向的位置,可能隨著你的專案還不同,像我現在的位置是指向 production/master 。




git 回到特定的節點

git reset <HHA-1>
git reset HEAD^ (留著修改在 working tree)
git reset HEAD^ --soft (修改放到 staging area)
git reset HEAD^ --hard (完全清除)

刪除不同的檔案git clean -df


# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)
git clean -fd


git fetch --all  
git reset --hard origin/master