此篇文章主要針對有安裝 XCode 的 Mac 用戶。

Git

版本控管工具,作用類似 CVSSubversion(簡 稱SVN),好處在於 Git 不像 CVS 及 SVN 是屬於集中式的版本控管工具,它採用分散式版本庫,即便連不上server,仍可以執行commit、rollback (rebase)等動作。加上 Dropbox 幫我們做檔案同步與共享,不需架一台 Git Server 也可多人同時開發。

Git Workflow

與CVS, SVN不同的是,每次修改檔案後要上傳,都需要先 add ,之後才能commit。

寫給大家的Git教學:介紹git的源由、觀念及相關指令,想要對git有深入的瞭解可參考此份slide!

Dropbox

透過雲端儲存實現網際網路上的檔案同步,使用者可以儲存並共享檔案和資料夾。Dropbox for Mac 安裝網址

共享專案方式為登入Dropbox,點選到該專案資料夾下,再點擊共享文件夾選項

之後輸入要共享對象的dropbox帳號(email)即可。
被共享的對象會收到Dropbox寄的一封email:

需開此email並點擊相關link,才能完成共享動作。

SourceTree

透過 GUI 介面操作,省去輸入繁瑣的 git 指令。

建立 Dropbox 的 Repository

裝完Dropbox for Mac後,在使用者帳號會有一個Dropbox資料夾,此資料夾下的檔案都會自動同步到雲端儲存空間。以下commad請在終端機執行:

  1. 建立 Git 使用的 repository (資料夾名稱不一定要命名為repository),若已有則略過mkdir repository此步驟:

    cd ~/Dropbox -> 切換至Dropbox資料夾
    mkdir repository -> 建立repository資料夾
    cd repository
    mkdir ${PROJECT}.git -> 建立project的git資料夾,${PROJECT}輸入專案名稱。
    cd ${PROJECT}.git
    git --bare init -> 將該資料夾初始化為git repository,即是git server端的資料,不存放原始檔案。
    若出現git command not found則表示該電腦未安裝git command。可到Xcode的menu選Preferences,在Downloads那一頁的Components,Install 'Command Line Tools',裝完應該就可以使用git command了。

  2. 新增 .gitignore 檔案(不執行版本控管的檔案)

    先切換到專案路徑下 (2,3,4,5 都在原專案目錄下執行)
    vi .gitignore -> 使用vi建立 .gitignore 檔案
    將以下的檔案清單copy paste到vi畫面中(paste前記得先按i進入編輯模式),結束按:wq再Enter即可。

    #for Xcode
    build/*
    *.pbxuser
    !default.pbxuser
    *.mode1v3
    !default.mode1v3
    *.mode2v3
    !default.mode2v3
    *.perspectivev3
    !default.perspectivev3
    *.xcworkspace
    !default.xcworkspace
    xcuserdata
    profile
    *.moved-aside
    *.pyc
    *~.nib/
    *.perspective
    .DS_Store
  3. 將原專案commit

    git init -> 初始專案
    git add . -> 加入目前資料夾(含子資料夾)的所有檔案
    git commit -m 'initial version' -> 提交目前程式至local端的repository,' '括起來的為此次commit的註解。

  4. 建立Git Server link

    git remote add dropbox file:///Users/${USER}/Dropbox/repository/${PROJECT_NAME}.git
    ${USER} 為Mac登入的帳號名稱,即終端機$前面到空白的這一段文字。
    ${PROJECT_NAME} 請填入專案名稱。
    git push dropbox master -> 將目前專案上傳至Dropbox資料夾
    若是push出現fatal error,可編輯.git/config該檔案,檢視remote的url是否有key錯。

  5. setup configuration

    git config branch.master.remote dropbox -> 設定主要分支的server名為dropbox
    git config branch.master.merge master -> 設定merger後的分支為master

取得他人在Dropbox分享的專案

此command只需執行一次即可,之後透過SourceTree進行commit, push, merge等動作。
先切到要置放此專案的目錄下,之後執行:

git clone -o dropbox file:///Users/${USER}/Dropbox/${PROJECT_NAME}.git

他人共享的資料夾,預設會放在Dropbox目錄下,因為不需進到/Dropbox/repository/目錄。
clone 完成後,即可用Xcode開啟該project了。

SourceTree 操作簡介

    • 設定user資料
      啟動SourceTree後,在Menu的SourceTree->Preferences->General,勾選'Allow
      SourceTree to modify your global …',並在Full Name及Email
      Address輸入資料,這樣在SourceTree上面就可看到commit的人是誰了。

    • 新增Project
      回到Bookmarks視窗,點選最左邊的Add Repository


      在project已存在的狀況下(自己建的project或是從Dropbox clone別人分享的project),選擇Add Working Copy


      選取project存在路徑,按Add即可。

    • SourceTree 功具列

      • Commit
        程式修改完畢,並Add完異動檔案後,commit 到 local repository。
      • Checkout
        從commit history中checkout特定的commit點的程式。
      • Reset
        將有異動的檔案回覆到之前的狀態(新增的檔案無法reset),可選擇單一檔案或全部有異動的檔案。
      • Stash
        隱藏所有的異動,並回覆到前一次的版本。stash之後,可在左側的STASHES欄位看到各個異動檔案diff的狀態。
      • Add
        將有異動及新增的檔案放到index區,準備commit。
      • Remove
        刪除檔案,並不再traking該檔案。
      • Add/Remove
        刪除不是透過Git Remove掉的已被刪除的檔案,並新增異動檔案到index區。
      • Fetch
        到remote端(若是用Dropbox,則是與Dropbox的檔案進行同步)抓取別人commit的檔案,並放在local端的repository。有時別人已push到Dropbox,但SourceTree的Pull卻未顯示,這時點按Fetch就對了。
      • Pull
        從remote端抓取更新檔(目前的檔案都必需是commit的狀態才能執行)。
      • Push
        將local端commit好的檔案傳送到remote端。
      • Tag
        將某一個已commit的狀態設定別名,如(上線版_1.0),**tag 名稱不能有空白**!
      • Terminal
        開啟終端機,並切換到該專案目錄下。

使用 Git + Dropbox + SourceTree 做 Source Code Management的更多相关文章

  1. Jekens Source Code Management None 源码管理没有Git

    jekens安装完成后,在配置中Source Code Management没有Git的选项,只有none,搞了大半天,一直安装插件报错,网上找的各种文章均未能解决我的问题,多次尝试后终于解决了这个问 ...

  2. Tips for newbie to read source code

    This post is first posted on my WeChat public account: GeekArtT Reading source code is always one bi ...

  3. akka cluster sharding source code 学习 (1/5) 替身模式

    为了使一个项目支持集群,自己学习使用了 akka cluster 并在项目中实施了,从此,生活就变得有些痛苦.再配上 apache 做反向代理和负载均衡,debug 起来不要太酸爽.直到现在,我还对 ...

  4. Memcached source code analysis (threading model)--reference

    Look under the start memcahced threading process memcached multi-threaded mainly by instantiating mu ...

  5. Top free and open source log management software

    As mentioned in the previous post, in my quest to find an alternative to Kiwi Syslog, I looked at a ...

  6. Android Branch and master source code merge(patch)

    Environment : Android 4.4.2 merge with Android 4.4.3(with other vendors source code) 1.确定你要merge 到 其 ...

  7. [Jenkins][git]构建时提示Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git reset --hard" returned status code 128:

    --------------------- 如需转载,转载请注明出处. --------------------- 今日发现所有IOS构建相关的job全部失败,并提示如下错误: ERROR: Erro ...

  8. HashMap source code view(1)

    前言 HashMap source code view 类注释 Hash table based implementation of the Map interface. This implement ...

  9. Eclipse Error: The refactoring does not change any source code

    最近在做android项目的过程中遇到这样一个问题,新增一个activity的时候添加不成,eclipse提示The refactoring does not change any source co ...

随机推荐

  1. Fortran学习笔记4(循环语句)

    Fortran学习笔记4 Fortran学习笔记4 逻辑运算 循环 Do语句 Do-While循环 循环控制 循环应用实例 逻辑运算 if命令需要和逻辑运算表达式搭配才能起到很好的效果.下面分别列出F ...

  2. vba练习资料

    链接:https://pan.baidu.com/s/1E0e58rZ_3QCCorWNM-ehSA 提取码:jluf

  3. centOS下SVN安装和配置

    1>SVN服务器端文件可见问题 在平时使用SVN时候,一直以为在客户提交文件,那么在服务器对应的版本库下面就会有相同文件.在自己搭建后,发现提交到服务器端文件完全看不见.... 这是由于SVN服 ...

  4. 三段式fsm

    1.状态转移的always中CS,同步ouput的always中NS. 2.3段fsm vs 2段fsm:output逻辑是组合逻辑和同步时序逻辑(消除里不稳的和毛刺). 3.3段fsm vs 1段f ...

  5. 关于set和multiset的一些用法

    set的一些用法 set的特性 set的特性是,所有元素都会根据元素的键值自动排序,set不允许两个元素有相同的键值. set的一些常用操作函数 insert() insert(key_value); ...

  6. strcpy与strcat函数原型

    1.strcpy函数原型 char *my_strcpy(char *dest,const char *src)    //const使在函数中不能修改*src其原先的值{ char *strDest ...

  7. PAT Basic 1014

    1014 福尔摩斯的约会 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm” ...

  8. 关于requirejs和grunt压缩合并是否矛盾

    requirejs主要是为了模块化开发,这样带来的好处不言而喻.但是分成多个js文件增加了请求数,那么就要用到合并压缩.合并压缩了原来的许多独立的js模块,那requirejs又是怎么冲压缩的文件中找 ...

  9. localstorage与sessionstorage的使用

    cookie,sessionStorage,localeStorage的区别 cookie是存储在浏览器端,并且随浏览器的请求一起发送到服务器端的,它有一定的过期时间,到了过期时间自动会消失.sess ...

  10. kendo Grid 列添加自定义模板

    columns: [ {field: "行为",template: "<a href='#= 行为#'>#= 行为#</a>"}, {f ...