幾乎所有iOS程序員都上過(guò)GitHub尋找開(kāi)源類(lèi)庫(kù),的確,GitHub上有大量?jī)?yōu)秀的開(kāi)源類(lèi)庫(kù)供大家學(xué)習(xí)。但是如何在Xcode中上傳代碼至GitHub呢?
開(kāi)始之前先安裝git
從源代碼安裝
若是條件允許,從源代碼安裝有很多好處,至少可以安裝最新的版本。Git 的每個(gè)版本都在不斷嘗試改進(jìn)用戶(hù)體驗(yàn),所以能通過(guò)源代碼自己編譯安裝最新版本就再好不過(guò)了。有些 Linux 版本自帶的安裝包更新起來(lái)并不及時(shí),所以除非你在用最新的 distro 或者 backports,那么從源代碼安裝其實(shí)該算是最佳選擇。
Git 的工作需要調(diào)用 curl,zlib,openssl,expat,libiconv 等庫(kù)的代碼,所以需要先安裝這些依賴(lài)工具。在有 yum 的系統(tǒng)上(比如 Fedora)或者有 apt-get 的系統(tǒng)上(比如 Debian 體系),可以用下面的命令安裝:
$ yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
之后,從下面的 Git 官方站點(diǎn)下載最新版本源代碼:
http://git-scm.com/download
然后編譯并安裝:
$ tar -zxf git-1.7.2.2.tar.gz $ cd git-1.7.2.2 $ make prefix=/usr/local all $ sudo make prefix=/usr/local install
現(xiàn)在已經(jīng)可以用 git 命令了,用 git 把 Git 項(xiàng)目倉(cāng)庫(kù)克隆到本地,以便日后隨時(shí)更新:
$ git clone git://git.kernel.org/pub/scm/git/git.git
在 Mac 上安裝
在 Mac 上安裝 Git 有兩種方式。最容易的當(dāng)屬使用圖形化的 Git 安裝工具,界面如圖 1-7,下載地址在:
http://code.google.com/p/git-osx-installer
圖 1-7. Git OS X 安裝工具
另一種是通過(guò) MacPorts (http://www.macports.org) 安裝。如果已經(jīng)裝好了 MacPorts,用下面的命令安裝 Git:
$ sudo port install git-core +svn +doc +bash_completion +gitweb
這種方式就不需要再自己安裝依賴(lài)庫(kù)了,Macports 會(huì)幫你搞定這些麻煩事。一般上面列出的安裝選項(xiàng)已經(jīng)夠用,要是你想用 Git 連接 Subversion 的代碼倉(cāng)庫(kù),還可以加上 +svn 選項(xiàng),具體將在第八章作介紹。(譯注:還有一種是使用 homebrew(https://github.com/mxcl/homebrew):brew install git。)
開(kāi)始
首先我們新建一個(gè)工程,記得要勾選Create git repository on:
這說(shuō)明使用Source Control,會(huì)默認(rèn)在工程中創(chuàng)建git repository。然后工程新建完成后,會(huì)在右側(cè)邊欄看到這些信息,說(shuō)明已經(jīng)啟用Source Control
如果沒(méi)有使用Source Control,則是這樣的:
現(xiàn)在我們已經(jīng)在工程中啟用了Source Control,這樣就可以使用git來(lái)管理工程版本了
但是如果我們想對(duì)一個(gè)未啟用git的工程加入git的功能怎么做呢?我們可以使用命令行來(lái)開(kāi)啟此功能,新建一個(gè)工程,不勾選Create git repository on,此時(shí)我們沒(méi)有開(kāi)啟Source Control,然后我們手動(dòng)創(chuàng)建git管理,如下圖所示:
YiBantekiiMac-3:UseGit YiBan$ cd /Users/YiBan/Documents/iOS_Dev/ManualGitDemo YiBantekiiMac-3:ManualGitDemo YiBan$ git init Initialized empty Git repository in /Users/YiBan/Documents/iOS_Dev/ManualGitDemo/.git/
使用
git init
來(lái)初始化一個(gè)空的git倉(cāng)庫(kù),現(xiàn)在使用ls-la命令查看目錄下的所有文件(包含隱藏文件)
total 16
drwxr-xr-x 7 YiBan staff 238 5 12 16:10 . drwxr-xr-x 52 YiBan staff 1768 5 12 16:06 ..-rw-r--r--@ 1 YiBan staff 6148 5 12 16:10 .DS_Store drwxr-xr-x 9 YiBan staff 306 5 12 16:06 .git drwxr-xr-x 12 YiBan staff 408 5 12 16:06 ManualGitDemo drwxr-xr-x 5 YiBan staff 170 5 12 16:06 ManualGitDemo.xcodeproj drwxr-xr-x 5 YiBan staff 170 5 12 16:06 ManualGitDemoTests
此時(shí)我們看到除了三個(gè)文件之外還有兩個(gè)隱藏文件,.DS_Store和.git,.DS_Store是由OS X生成的文件,包含了文件夾中的位置屬性,.git則是啟用了Source Control自動(dòng)生成的目錄,然后使用git status查看當(dāng)前狀態(tài):
YiBantekiiMac-3:ManualGitDemo YiBan$ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) .DS_Store ManualGitDemo.xcodeproj/ ManualGitDemo/ ManualGitDemoTests/nothing added to commit but untracked files present (use "git add" to track)
說(shuō)明初始化成功了,顯示出了未被追蹤的文件。不過(guò)我們并不希望把.DS_Store也加入的git中,因?yàn)槟俏募䦟?duì)我們沒(méi)有任何用處,我們可以忽略它,具體做法是:新建一個(gè)文件,命名為.gitignore,然后使用文本編輯器輸入以下信息:
# Xcode .DS_Store */build/* *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata profile *.moved-aside DerivedData .idea/ *.hmap
保存至工程文件夾中,這樣我們目錄中就多出一個(gè).gitignore文件了,這時(shí)我們?cè)儆胓it status命令查看當(dāng)前狀態(tài):
YiBantekiiMac-3:ManualGitDemo YiBan$ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore ManualGitDemo.xcodeproj/ ManualGitDemo/ ManualGitDemoTests/ nothing added to commit but untracked files present (use "git add" to track)
這里看到已經(jīng)沒(méi)有.DS_Store了,說(shuō)明.gitignore已經(jīng)把.DS_Store忽略了,F(xiàn)在可以提交了,使用
git add .
此命令先將文件添加至?xí)捍鎱^(qū)域,但還沒(méi)有提交,查看下?tīng)顟B(tài):
YiBantekiiMac-3:ManualGitDemo YiBan$ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitignore new file: ManualGitDemo.xcodeproj/project.pbxproj new file: ManualGitDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file: ManualGitDemo/AppDelegate.h new file: ManualGitDemo/AppDelegate.m new file: ManualGitDemo/Base.lproj/Main.storyboard new file: ManualGitDemo/Images.xcassets/AppIcon.appiconset/Contents.json new file: ManualGitDemo/Images.xcassets/LaunchImage.launchimage/Contents.json new file: ManualGitDemo/ManualGitDemo-Info.plist new file: ManualGitDemo/ManualGitDemo-Prefix.pch new file: ManualGitDemo/ViewController.h new file: ManualGitDemo/ViewController.m new file: ManualGitDemo/en.lproj/InfoPlist.strings new file: ManualGitDemo/main.m new file: ManualGitDemoTests/ManualGitDemoTests-Info.plist new file: ManualGitDemoTests/ManualGitDemoTests.m new file: ManualGitDemoTests/en.lproj/InfoPlist.strings
現(xiàn)在進(jìn)行提交,使用git commit -m "Initail"命令,引號(hào)內(nèi)的內(nèi)容是提交的注釋?zhuān)S便寫(xiě)什么都可以:
YiBantekiiMac-3:ManualGitDemo YiBan$ git commit -m "Initial"[master (root-commit) 83bbefc] Initial 17 files changed, 803 insertions(+) create mode 100644 .gitignore create mode 100644 ManualGitDemo.xcodeproj/project.pbxproj create mode 100644 ManualGitDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ManualGitDemo/AppDelegate.h create mode 100644 ManualGitDemo/AppDelegate.m create mode 100644 ManualGitDemo/Base.lproj/Main.storyboard create mode 100644 ManualGitDemo/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ManualGitDemo/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 ManualGitDemo/ManualGitDemo-Info.plist create mode 100644 ManualGitDemo/ManualGitDemo-Prefix.pch create mode 100644 ManualGitDemo/ViewController.h create mode 100644 ManualGitDemo/ViewController.m create mode 100644 ManualGitDemo/en.lproj/InfoPlist.strings create mode 100644 ManualGitDemo/main.m create mode 100644 ManualGitDemoTests/ManualGitDemoTests-Info.plist create mode 100644 ManualGitDemoTests/ManualGitDemoTests.m create mode 100644 ManualGitDemoTests/en.lproj/InfoPlist.strings
再查看下?tīng)顟B(tài):
YiBantekiiMac-3:ManualGitDemo YiBan$ git status On branch master nothing to commit, working directory clean
好了,當(dāng)前工作區(qū)是干凈的,代碼都已經(jīng)提交完畢了。我們可以用Xcode提交代碼,也可以用命令來(lái)提交,但是用命令行的話(huà)可以做的事情更多一些。使用Xcode可以查看提交的歷史紀(jì)錄,Source Control->History:
添加工程至GitHub
首先必須有GitHub的帳號(hào),沒(méi)有的話(huà)去注冊(cè)一個(gè),并且還要?jiǎng)?chuàng)建SSH,GitHub使用了公私密鑰,確保與你的電腦通訊過(guò)程是安全的。
SSH創(chuàng)建過(guò)程是這樣的:
1. 在命令行輸入cd ~/.ssh,然后ls,看看此文件夾下有哪些文件,如果有id_rsa.pub或者id_dsa.pub(名字可能會(huì)不同),說(shuō)明你已經(jīng)有SSH keys了,你可以將它添加到你的賬戶(hù)中
2. 如果沒(méi)有的話(huà),你講得到"No such file or directory "這個(gè)錯(cuò)誤信息,此時(shí)你可以通過(guò)命令生成出來(lái):
ssh-keygen -t rsa -C "YOUR EMAIL"
在那里填寫(xiě)你的email地址,之后會(huì)被要求填寫(xiě)密碼,此時(shí)的SSH keys就生成好了,有了SSH Keys后將其添加至你的GitHub賬戶(hù)中就可以了,在賬戶(hù)設(shè)置中找到SSH keys這一項(xiàng),然后填寫(xiě)title和key,現(xiàn)在,你的SSH Key就和GitHub賬戶(hù)綁定了
前往個(gè)人主頁(yè),新建一個(gè)repository(網(wǎng)頁(yè)右上方),會(huì)要輸入一些信息:
輸入Repository name和描述,然后選創(chuàng)建,會(huì)看到repository的鏈接:
把鏈接賦值下來(lái),前往Xcode中,Source Control->第一項(xiàng)->Configure...,之后選Remotes:
Add Remote中,輸入Name(你工程的名字)和Address(之前的鏈接地址),然后Source Control->Push,選擇剛剛新建的鏈接,Push~
現(xiàn)在刷新下GitHub主頁(yè),你的工程已經(jīng)添加成功了~!