iOS開發使用Git的那些事

前言

工做以來一直就使用SourceTree提升工做效率,那些本來熟悉的命令所有忘記乾淨了。
前些天因爲忽然斷電,公司內部服務器硬盤故障,因此內部服務器上git倉庫重建,我也趁機把git命令操做又熟悉了一遍,今後決定不到萬不得已再也不使用SourceTree操做了,一切操做都走git命令。
在這裏把一些經常使用的和注意事項羅列出來供你們參考和本身記錄。
強烈建議不熟悉git的朋友先熟悉命令,SourceTree只是提升效率的一種手段而已,原理仍是要明白的好ios

目錄

題主已經打算卸載SourceTree,本文主要講解git使用三個方面:
1.構建協做環境(將已有代碼放到git倉庫上面供別人分享,將別人放在git上面的代碼clone下來)
2.git經常使用命令(包括:代碼的增刪改查等操做)
3.忽略文件.gitignore的配置git

1、git從本地文件連接到遠程倉庫的方法(代碼在本地,遠程倉庫爲空)

公司項目協做是須要配置ssh key的,全部操做的前提是你已經配置了ssh key。vim

具體命令以下:api

cd existing_folder //進入到工程文件夾
rm -rf .git  //先清除.git文件
git init    //再重置
git remote add origin xxxxxxxxx  //連接到遠程分支xxxxxxxxx(git上面的倉庫地址)
git add .  //暫存全部文件
commit以前設置下名字和郵箱 global爲全局 local爲本次
git config --global user.name "瓜皮"
git config --global user.email "guapi@yaomaitong.cn"
git commit 須要輸入註釋說明
git commit -m 'description'
git push -u origin xxxx    //最後push到xxxx分支

等待完成以後到sourceTree裏面去從添加已存在的本地倉庫

因爲公司是重建的git工程,push的時候報了個錯,這裏記錄一下(由於服務重建,.ssh下的known_hosts裏面的hostkey改變了,因此vim編輯進入,刪除之前的key便可)xcode

zjmdeMBP:zhujiamin PRO$ git push -u origin master
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:2pWcmnQ4P38EUSSXNp89uG0um/K01bz/mWMJC3TMj2M.
Please contact your system administrator.
Add correct host key in /Users/a123/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/a123/.ssh/known_hosts:3
ECDSA host key for git.yaomaitong.net has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

2、git將遠程倉庫clone到本地的方法(代碼在遠程倉庫,本地啥也沒有)

mkdir iosProject  //在當前目錄建立一個空文件夾 (也可手動建立或者直接使用已有的文件夾)
cd iosProject //進入到你想要放置工程的空文件夾
rm -rf .git  //先刪除可能隱藏的git    (我的習慣而已)
git clone xxxxxxxx  //clone遠程git倉庫到本地

clone成功的樣子:緩存

zjmdeMacBook-Pro:restoreOldiOS PRO$ rm -rf .git
zjmdeMacBook-Pro:restoreOldiOS PRO$ git clone git@git.xxxxxx.net:xxx/ios.git
Cloning into 'ios'...
remote: Counting objects: 5611, done.
remote: Compressing objects: 100% (1914/1914), done.
remote: Total 5611 (delta 3657), reused 5611 (delta 3657)
Receiving objects: 100% (5611/5611), 107.30 MiB | 5.44 MiB/s, done.
Resolving deltas: 100% (3657/3657), done.
Checking connectivity... done.

clone成功以後應該在進入工程文件夾裏面,本地建立幾個遠程必須的分支,主要用到的命令是:服務器

git branch -a 查看全部分支
git checkout -b xxxx origin/xxxx   //建立並切換到想要建立的本地分支

操做成功的樣子:網絡

zjmdeMacBook-Pro:restoreOldiOS PRO$ ls    //遠程文件夾爲ios
ios
zjmdeMacBook-Pro:restoreOldiOS PRO$ cd ios    //進入
zjmdeMacBook-Pro:ios PRO$ ls
Medicine        MedicineTests        Pods
Medicine.xcodeproj    Podfile            README.md
Medicine.xcworkspace    Podfile.lock
zjmdeMacBook-Pro:ios PRO$ git branch    //查看已有分支(只能看到已存在的分支)
* master
zjmdeMacBook-Pro:ios PRO$ git branch -a    //查看全部分支,能夠看到遠程有好幾個分支
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/feature_newLogin
  remotes/origin/master
zjmdeMacBook-Pro:ios PRO$ git checkout -b develop origin/develop    //挑選本地須要的分支進行建立
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
zjmdeMacBook-Pro:ios PRO$ git checkout -b feature_newLogin origin/feature_newLogin
Branch feature_newLogin set up to track remote branch feature_newLogin from origin.
Switched to a new branch 'feature_newLogin'
zjmdeMacBook-Pro:ios PRO$ git status
On branch feature_newLogin
Your branch is up-to-date with 'origin/feature_newLogin'.
nothing to commit, working directory clean

3、git經常使用命令

1.分支操做

git status 查看當前所在分支和更改內容
git branch 查看全部分支
git branch xxx 新建某分支
git checkout xxx 切換到某分支
git checkout -b xxx 建立並切換到某分支
git pull origin xxx 拉取xxx分支
git push origin xxx 推送同步xxx分支
git merge xxx 合併分支 (通常須要先切換到目的分支,而後merge想要merge的分支)

2.提交修改

git status //查看改動
git add xxx.m  //暫存xxx.m文件
git add .  //暫存全部改動
git rm xxx  //刪除xxx文件
git commit -m '修改了xx功能'  //添加註釋
git push origin xxxx   //push  注意當前所在網絡是否容許push
git commit --mend 修改最近一次提交的代碼(這裏會進入vim編輯器去修改)

3.查看某個文件的修改歷史

git log --pretty=oneline 文件名   //須要進入該文件所在的文件夾
這裏必需要進入到.h/.m文件所在的文件夾下,而且只能看到每次commit產生的hash碼

例如:
zjmdeMBP:pinyin PRO$ git log --pretty=oneline ChineseString.h
f9f280d0df7907af97f8c88be58e9eb14cabdc93 去除無效的代碼
7146065685ccc243bf9ca24ce67de0bf4277f7bc 完善工程
db2d150806a8583fa006e105c4461f977507d341 first

想要看到詳細情形還須要使用 git show <hash碼>  才能看到該次commit所作的修改內容及Author 和 Date;

4.撤銷改動

a.修改最近一次commit的內容ssh

git commit --amend 或 git commit --amend -m '註釋信息'

b.commit前發現某個文件沒有必要改動,咱們須要讓該文件回到未改動的狀態編輯器

git checkout -- <filename>

c.本地已經執行提交操做,可是尚未push,想要撤銷某文件的更改

git reset <文件名> //缺省文件名時默認取消上次提交的全部內容,提交的內容回到未暫存狀態
git reset --hard <文件名> //缺省文件名時默認取消上次提交的全部內容,而且修改的內容也所有重置

5.回滾代碼到某次提交的節點

git log --oneline //查看全部的commit歷史,顯示每次commit生成的hash碼的前七位和註釋信息,例如:

zjmdeMBP:ios PRO$ git log --oneline
a674e9f AFN更新至3.1.0
345db82 消息閃退try..catch;
fb33370 更新cocoaPods及第三方庫;
01931f7 忘記密碼佈局位置調整;
08ce469 增長友盟計數事件;

git revert xxxx //xxxx爲某次commit的hash碼,例如我想回滾到AFN更新前,命令以下:

git revert a674e9f

執行以後進入vim編輯,填寫註釋後保存退出,而後add、commit、push就完成回滾了。

題主執行這一操做的時候,剛好電腦內存滿了。。。全部報了下面這個錯,記錄一下

".git/COMMIT_EDITMSG" E509: Cannot create backup file (add ! to override)

編輯完回滾信息wq竟然一直提示這個錯誤退不出去,一查發現是由於電腦內存滿了,清理一些內容以後就OK了。

4、.gitignore的建立和使用

正常狀況下咱們並不須要將工程裏面的全部內容都提交到git遠程倉庫,而且有些信息(好比那些每次編譯都會變化的信息)會時常出如今UnCommitted changes裏面,以下圖:
圖片描述
因此咱們須要一個.gitignore來幫助咱們過濾這些沒必要要的信息;
事實上爲了節省服務器空間,一些項目也會過濾掉pods管理的第三方庫,只上傳Podfile相關信息,下面的代碼沒有過濾pod文件,各位看官按需本身添加。

1.寫在.gitignore裏面的代碼:

# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

## Other
*.xccheckout
*.moved-aside
*.xcuserstate

2.建立.gitignore文件

我所知道的兩種建立方法以下:

方法a:
cd existing_folder //進入到工程文件夾
touch .gitignore //建立一個.gitignore的文件
vim .gitignore //使用vim編輯器編輯.gitignore文件(也可使用方法b後半部分的方法去編輯)
方法b:
當你用文本編輯器去編輯一個文件後保存爲.gitignore的時候,系統會告訴你"Names that begin with a dot 「.」 are reserved for the system.  If you decide to go ahead and use a name which begins with a dot the file will be hidden."由於以.開頭的文件爲系統保留,必定要建立的話該文件將會被隱藏。
因而咱們能夠用文本編輯器將忽略文件的代碼寫好後保存到項目工程目錄下並命名爲.gitignore文件(忽略系統提示),雖然它默認被系統隱藏,可是將你的工程文件夾拉入一個文本編輯器, 以下圖所示, 本文示例使用的Sublime Text, 依然可以看到並編輯的!

圖片描述

若是你已經將一些本該忽略的文件提交到git服務器, 那麼配置好.gitignore以後會發現以前老是出現的用戶信息依然出如今Uncommitted changes中, 緣由是由於.ignore是後來加進來的local cache裏面記錄的這個文件是不忽略的, 因此須要進行緩存清除, 這個時候你只須要將進入該工程目錄下, 執行刪除緩存中的文件後提交便可:
注意緩存路徑就是出如今Uncommitted changes中的文件路徑, 請確認路徑正確。

$ git rm --cached  你的工程名.xcodeproj/project.xcworkspace/xcuserdata/你的電腦名.xcuserdatad/UserInterfaceState.xcuserstate
$ git commit -m '註釋信息'
$ git push origin 分支名

git操做固然不止這點內容,太晚了, 明天繼續完善補充。。。

感謝閱讀,但願本文對你有幫助!

本人座標杭州,後續我會陸續把工做中遇到的問題及解決方案分享出來,互相交流學習,本人QQ:815187811,歡迎結交[笑臉].

相關文章
相關標籤/搜索