资 料 片 / 超 人
关于Xcode9中git的使用与git命令
Git 命令
$git init //初始化仓库
$ git config --list //查看配置信息
$ git config --global user.name “用户名” //配置用户名
$ git config --global user.email test@email.com //配置邮箱地址
- 第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录.如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里
配置ssh
首先查看是否已经有了ssh密钥:cd ~/.ssh
如果没有ssh就不会有该文件夹。
生成密钥:
$ ssh-keygen -t rsa -C “xxx@xxx.com” //这里的电子邮箱是你上面配置用于登陆git的邮箱
如果需要密码就输入密码,如果不需要直接回车3次即可。
完成后会在.ssh文件夹下生成id_rsa和id_rsa.pub两个文件
.pub后缀的文件是公钥,需要把公钥的文本内容复制到git上配置ssh
另一个是密钥
$ cat ~/.ssh/id_rsa.pub //查看公钥文本内容
$git add . //添加所有文件到暂存区
$git add 文件路径 //添加单个文件到暂存区
$git commit -m '注释' // 提交文件到仓库, -m 加注释的命令
$git status //查看文件的状态
-
说明:凡是有改动但没有加入到暂存区的文件都显示在Changes not staged for commit:下;凡是加入到暂存区没有提交的文件都在Changes to be commit:下。
注意:提交的时候,git只会把暂存区中的文件提交到仓库中;所以提交的时候一定要看清楚文件的状态。
git diff //查看未加入暂存区的修改的文件内容
- 说明:由下图可以看出在文件中增加了look diff,然后用git diff 命令可以看出未加入暂存区的文件的修改;用git diff --cached查看加入暂存区的文件修改;当采用 git add . 把所有文件都加入到暂存区后使用 git diff是查看不到任何修改的。
$git diff --cached //查看已经加入暂存区的修改的文件内容
$git log //查看提交的记录
$git reset //撤销修改
-
说明:回退到之前的某个版本:(本地源码会改变)git reset --hard HEAD^ //回退到上个版本git reset --hard HEAD^^ //回退到上上个版本git reset --hard HEAD~100 //回退到前100个版本git reflog //查看版本信息git reset --hard 版本号 //回退到指定版本
撤销本次commit (本地源码不会改变)git reset --soft HEAD^撤销add (本地源码不会改变)git reset 或者git reset --mixed回退工作区的修改 (本地源码会改变)git checkout -- filename 撤销工作区的修改(即没有add之前修改)回退到没有任何修改之前和服务器一样git reset --hard origin/master //将本地版本回退到和远程服务器一样
$ git branch //查看所有分支
$git branch 分支名 //创建分支
$ git checkout 分支名 //切换到该分支
$ git branch -d 分支名 //删除该分支
$ git merge 分支名 //合并分支
- 说明:需要先git checkout切换到主分支,在使用git merge把需要合并的分支合并过来。即把其他分支和当前分支合并在一起
$ git tag //查看所有标签
$ git tag -a 标签名 -m ‘注释’ // 创建标签
$ git checkout 标签名 //切换标签
$ git tag -d 标签名 //删除标签
$ git remote add origin //远程仓库路径
$ git push -u origin --all
- 说明:提交所有的文件从现在开始,如果改变了本地代码并且要提交到远程服务器上就要进行以下三步:
<1> git commit -m ‘注释’ 提交本地代码到仓库
<2>git pull 拉取服务器上的最新代码,检查仓库代码与服务器代码版本号是否相同
<3>git push 提交到远程服务器
$ git clone 拉取git服务器仓库
<1> git clone 远程仓库地址 --------------------直接克隆仓库到本地,并且本地文件夹的名字和远程仓库的名字一样
<2> git clone 远程仓库地址 本地文件夹名字 --------------------直接克隆仓库到本地,并且本地文件夹的名字和远程仓库的名字不一样
Git的问题
-
(1) 解决 Please move or remove them before you can merge
使用$ git clean -d -fx 文件名删除本地文件 -
(2) 解决 Fatal: cannot do a partial commit during a merge
方法1. 提交全部 $ git commit -a
方法2. 如果不想提交全部,那么可以通过添加 -i 选项 $ git commit file/to/path -i -m "merge"
Xcode9使用Git
关于Xcode9中使用Git内容取之于《How To Use Git Source Control with Xcode 9》。个人简化了内容,如若需要查看详细内容请点击这里
创建工程时勾选Xcode中使用Git需要在创建工程时,勾选如图下选项:
(注: 如果没发现这个选项的话点击Options按钮)
如果创建时没有勾选,可以在git上创建好仓库后,把工程单独提交到git上。跟创建工程时勾选结果一样。
gitignore git忽略文件
注意:最好在项目开发之前完成.gitignore文件的添加
Git还跟踪Xcode的各种文件。因为这些文件对于项目来说和代码文件同样重要。你需要这些来与团队成员共同完成应用开发工作。但是App的每次build都会使Xcode生成新的文件。Xcode会自动地重新生成这些文件,所以保存这些内容并没有实际意义。不仅没有意义,还可能让你在提交历史中查找修改内容增加了难度。Git提供了一种机制来忽略这些文件:.gitignorefile。macOS会把它当作一个隐藏的文件,所以当你在Xcode或Finder中查看你的项目内容时是不会看到这个文件的。但是不要怕,Git就能找到它。
不需要自己做,可以从gitignore.io上下载到此文件。
首先打开Terminal终端,输入以下代码。这些操作只要做一次,不需要在每次开发新项目的时候重复操作。
$ git config --global alias.ignore '!gi(){curl -L -s https://www.gitignore.io/api/$@;}; GI”
现在,对于使用Git的任何项目,请在终端窗口中执行以下操作:
cd <存储项目的目录>
git ignore swift,macos> .gitignore
git add .gitignore
git commit -m“添加.gitignore文件”
将下载最新的.gitignore配置,用于在MacOS上编写Swift代码。你的终端会话应该类似于:
上面方法是文档中的,本人试过失败了。。表示不懂。下面方法是本人自己用命令来自行创建.gitignore方法。
1. 首先打开终端 cd到工程目录下
2. touch .gitignore //创建.gitignore文件
3. open .gitignore //打开.gitinore文件,因为.gitinore是隐藏文件
4. 复制一下内容到.gitinore文件中并保存:
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.xcuserstate
*.SD_Store
*.xcbkptlist
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
*.
5. 在提交工程时,请勾选.gitignore。一并提交。
**6. 删除忽略文件 ** //删除后就不会在提交.gitignore中已忽略的文件了
举例:
-
(1) .DS_Store已提交到了git的服务器。需要先到git的服务器中删除.DS_Store文件。
-
(2)然后需要删除电脑本地仓库中的.DS_Store文件, 使用git clean -d -fx 文件名 删除。
文件Git标识
“M”代表“发生更改”,意思是你对这个文件进行了修改但是还没有提交此次的变化到你的本地Git仓库中。
“A”的标示,意思是这个新增文件还未被提交到仓库
Xcode提交代码
Xcode顶部菜单栏中点击Source Contro->Commit**
主界面被分成两部分。左侧窗口显示的内容是最新的代码。如果你是第一次提交,那左侧显示的就是从创建项目开始的所有开发代码。右侧窗口显示的是修改前的代码。
左侧面板1:未提交修改的文件列表。默认为所有未提交的文件全部选中。不过不想提交的话手动取消勾选。通过对比具体代码内容窗口,可以对文件中的修改内容进行是否需要提交的选择。代码内容窗口中蓝色高亮部分为发生变化的代码区域,就算你增加或者删除了一个空格的改动也会被标注高亮。
内容窗口中间区域2:列举当前文件中所有更改的内容。每个更改默认都是选中状态,同样可以根据实际情况手动不勾选。例如change3比较无所谓,取消勾选后就这段修改就不会被提交。
底部输入框2:在你提交之前,Xcode会要求你填写提交信息。此处填写的信息能帮助你更容易理解每一次的提交内容和目的(个人认为尽量多花点时间在写每次提交的信息上,当开发团队逐渐扩大、代码量上去之后,提交次数会越来越多,如果想花更少的时间去寻找或者了解每次提交的版本的内容的话最快捷的办法就是通过这些信息)
Xcode创建分支
Xcode自带Git支持提交修改内容到指定分支。先解释什么是分支:一个分支可以看做提交内容的集合。在不同分支中操作可以降低修改代码内容带来的可能会影响项目原先功能的风险。
仓库创建的时候Git会自动创建一个叫做“mater”的分支,以上的操作其实都是在这个分支中进行的。master分支一般用作保存项目稳定代码,其它的分支用作日常开发。(Git和SVN同样有命名规范但也不是硬性的要求,所有开发人员都遵循一套标准方便对代码进行管理。例如:master:线上版本分支;developer:测试版本;其它分支:项目中每个开发人员独立分支用作日常开发)
添加新功能势必会对原代码造成很大变动。使用新分支能帮助你杜绝因此造成的各种风险。点击左下角的齿轮按钮,选择Branch from “master”
填写新分支的名称,点击Create:
Xcode就会帮你创建一个新的分支,初始选中。当前分支的边上会显示(current)
提交完成后,有进行提交过的文件边上的标示将会消失:
合并分支
在前面了解到Git允许在多个被称为分支的修订流中工作;在master分支之外的分支上执行所有的开发是一种很好的体验。当完成一个新功能的开发并想要发布它时,就需要把当前分支合并到mater分支中。
新功能还没有完成,但产品经理明确需要在主界面中添加另一个文本。要实现这一点,需要暂时离开开发新功能的这个分支,并从稳定的主分支中再创建一个新的分支。
具体操作如下:
创建完成后当前选中分支并没有发生变化,右键点击新创建的分支,选择Checkout
Xcode问你确不确定,当然确定咯。
这样新的分支就会变成刚才创建的分支,分支名右侧多了(current)
功能开发完毕并Run了没问题后提交。与上面操作一样,先切换到master分支。右键点击刚才发生修改的分支,选择Merge “new_label” into “master”
Xcode又问你确不确定,你说确定合并。
合并窗口将出现用于控制合并的过程。合并源(the “merge from” branch)将出现在右边。您当前的代码,也就是合并后的代码将出现在左边。使用屏幕底部的按钮来控制合并的方向。对于一个简单的合并,比如这个,使用Xcode的默认设置即可。
最后点击Merge按钮开始合并。
If all goes well, you should see the changes (theUILabel) from the new branch appear in the user interface when you click onMain.storyboardor when you run your application. Now your changes are in the master branch because of the merge! Use one of the methods of viewing your commit history that you learned to verify that this change appears in the history.
Xcode撤销提交
Xcode还未提交到服务器仓库的撤销
一天你在项目的最新版本中加一个很酷的功能,吃了个下午茶后发现可能有更好的实现方式,这时候你想回到最新版本的初始状态重新开发。
如果你不希望保留这些的修改操作,可以在Xcode的导航栏中选择selectSource Control\Discard Changes
Xcode会与你确认是否要做此操作(毕竟不小心discard还是有一定风险,原本写了好几天的代码说没就没了,而且是再也找不回来的那种)
不仅可以放弃一个文件的整体更改,还可以像提交那样选择文件中的部分内容放弃。
好了,你之前的修改都没了,也没有内容可以提交了。既然已经尝试过放弃更改,您可能会想知道这两者之间的区别是什么,以及您之前选择的不提交选项。虽然这两种选择都导致了本地仓库中没有记录的更改,但是有一个很大的区别:如果在commit时选择忽略某个修改内容,那么这个修改将不会被提交,但是本地源码中还是会有修改记录。discard不仅忽略修改内容,还会将本地源码还原。
Xcode服务器仓库的撤销
如果想恢复代码,Discarding changes是一种比较节省成本的做法。但是有些情况下使用可能会带来一些麻烦。Git提供项目可以保存多个版本的功能。所有内容将会保存在仓库里,通过Git可以对其进行管理。如果你选择discard changes一个文件,Git会把这个文件恢复成最后一次提交的版本中这个文件的内容。这就是限制所在。
随着项目的更新迭代,你的项目仓库中的版本会越来越多。如果你想回到第一个或者第二个版本的话,通过discarding changes就没办法做到。但是Xcode和Git还有其它功能能很容易实现这个需求。
选择ViewController.swift. 选择View\Version Editor\Show Comparison View. 在Xocde的右上角切换到第三个按钮。
你可以比较两个版本内容。默认状态下当前内容显示在左侧,Git仓库中存储的最新版本内容显示在右侧。如果想与仓库中更早版本进行比较,点击右下角的⏲️按钮就可以选择你想要的版本。
如果想恢复到具体版本,只需单击比较窗格中的更改号旁边的箭头,然后选择Discard Change
Once you finish reverting to an earlier version, you will need to commit this “new” version of the file as the most recent. Go ahead and do that now.
一旦恢复成之前的版本,就相当于当前又是一个新的版本,所以同样需要提交。
如何分辨哪个提交是你希望切换的呢?按住版本编辑按钮,选择Log。或者在菜单栏中选择View\Version Editor\Show Log View。
Xcode会罗列出当前文件的所有提交内容。每次提交都会有一个唯一标识符。
这些标识符与之前使用的更改历史列表中所示的标识符匹配.
同样可以通过点击Show modified files显示详细内容。
另一个实用功能为Blame。在这个界面中你可以看到文件中在每次提交时的变化。
按住版本编辑按钮并选择Blame. 或者从菜单栏中选择View\Version Editor\Show Blame View.
如果想看提交更改的详细内容,点击日期边上的ℹ️按钮。
Xcode项目直接调到git仓库
右键点击远程仓库中的某个分支,选择selectView on GitHub,就可以看到GitHub中的该分支的具体内容。
如果每次更改都要推送到远程分支中,那么修改后Run没问题的话,点击Source Control\Commit,再点击Source Control\Push。
网友评论