Git操作步骤图解_Sourcetree

  • 自从被GitKraken的免费7天骗了之后,我突然觉得Sourcetree应该挺香的
  • 先去下一个Sourcetree,建议第三方加速,不然慢的一

(一)前戏

  • 下载之后打开
  • 它会让你注册,你就点这个注册Bitbucket,不过上网要科学
  • 网页上的内容就是一般的平台注册,英文阅读障碍可以用下翻译,这里不演示了
  • 就假装到这一步了
  • 会让你选插件,当然是全都要
  • 然后就是下一步下一步
  • 应该会提醒链接你的Github账号,这时就可以链接一下
  • 突然弹出这么一个框,因为现在还没有SSH(st专属的版本),就点否
  • 然后第一件事就是整SSH
  • 英文界面不要慌,Generate(生成)一下
  • 然后 Save public keySave private key 保存到 C:/Users/user/.ssh 里,格式是ppk
  • 记得重命名不要覆盖之前已经有的密钥
  • 如果完事后没反应可以加个载(Load)
  • 然后进入选项
  • Theme(主题)可以换成黑的(护眼)
  • 还可以检查一下SSH有没有配置好
  • 换到Git选项卡,把底下的 启用强制推送 开起来
  • 芜湖,配置成功

(二)怎么用

如何高效导入Unity工程

  • 现场来做个示范吧
  • 比如说一个Unity工程的步骤存档
  • 先在Github上弄一个仓库,网慢修改Host(无情)
  • 这里复制仓库地址(经典操作)
  • 点击标签页的加号,再点克隆(Clone)
  • 填入仓库地址,本地文件位置,本地仓库文件夹名
  • 打开慈祥的Unity,在本地仓库里新建工程
  • 这时Sourcetree躁动不安
  • 骚粉和紫色就是无效区暂存区,无效区包含Git未托管的文件以及各种各样的修改了的文件,文件需要暂存了之后再来保存成版本
  • 青色是版本提交区,可以写一些版本描述
  • 绿色是检视面板,分支 是本地的分支,远程 是服务器的分支
  • 点击暂存所有,文件就都跑到暂存区了(报红就关一下Unity再暂存,当然也可以不关)
  • 作为工程的起始,保存成 版本初始化 ,好了提交
  • 本地存档了,但万一本地坏了,就应该去奢求上传服务器远程
  • 点击上头的推送
  • 这个意思是将本地 main 分支下的存档投递到服务器Github上的 main 分支
  • 如果远程与本地有出入,本地想覆盖远程,可以勾选强制推送
  • 由于Unity空工程有个50M,初始化需要投递一定的时间(1分钟)
  • 切换检视面板到 History ,查看历史版本
  • 发现在刚创建的初始版本之前,Git还创建了个版本,不用管它
  • 如果创建版本感觉后悔,可以选择追加修改(仅最后提交的版本)
  • 这里我加入了DoTween插件
  • 切换到文件状态视图,暂存,一条龙

  • 选择 修改最后一次提交 ,在弹出框里选是,再提交,再推送(要强制推送)

  • 这样就修改了刚提交的分支

  • 但是我突然发现Unity里文件一大堆,主要是配置文件,如果Unity版本不一致会出很多Bug,所以Unity工程需要多余的配置
  • 所以删掉我们刚才的版本存档,我们重新来过(不要真去删文件啊)
  • 右键原始版本 Initial commit 撤回分支,再强制提交
  • 回到文件状态视图,发现Git并没有删除原工程,只是将暂存退回了
  • 这里在网上(gitee)找到一个 Git忽略 文件,用来控制Unity忽略什么类型的文件

文件在这里复制和下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/

# Uncomment this line if you wish to ignore the asset store tools plugin
# [Aa]ssets/AssetStoreTools*

# Visual Studio cache directory
.vs/

# Gradle cache directory
.gradle/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta

# Unity3D generated file on crash reports
sysinfo.txt

# Builds
*.apk
*.unitypackage

# Crashlytics generated file
crashlytics-build.properties
  • 把它保存成 .gitignore ,删除文件拓展名,对,它就叫这个

    • 这个文件也可以自定义,比如:
    • *.psd 指所有psd不予暂存
    • test.* 指所有叫test的文件不予暂存
    • test.psd 指这个文件不予暂存
  • 保存到仓库根目录

  • 选择这个忽略文件,暂存所选,单独为这个文件保存成一个版本,推送远程
  • 再来暂存Unity工程,保存成版本,推送远程
  • 前往Github,来下载这个分支,发现这个文件贼他马小,说明它不包含Unity本地的配置信息
  • 小到1M,压缩后300K,难以置信
  • 我不相信这个上传的文件是不是正常文件,事实胜于雄辩,版本需要检验

  • 于是我重新克隆了一下服务器到本地,重新打开Unity

  • 草了,东西一分不少
  • 回想一下,如果没有忽略文件,上传的Unity空工程将高达50M

分支

  • 回到原来的仓库,顺便把测试用的仓库删掉(无情)

  • 随便加点东西(一直转的立方体)

  • 保存,暂存,版本(想必也会了)
  • 这里多做了几个版本,不展示了
  • 来介绍一下这是什么意思 ↑
  • 正如图谱所示,这个仓库的版本是直线式的,没有分支
  • 如果做到版本5,也就是上材质这一步,开始做出不一样的变化,就需要使用分支
  • 我们从版本4支出两个分支,一个橙色材质,一个蓝色材质
  • 因为本地Main分支呆在版本5上,如果我回退到版本4,版本5就将会被移除,就必须得用gitbush指令才能调出来,所以,在版本5创建一个分支,用来“钉固”版本5的存档(这句话很重要)
  • 可以发现,版本5上停了两个分支(可以比作图钉)
  • 双击左边检视面板的分支1,确保当前位置在分支1而不是main上
  • 可以猜到,版本1上的两个origin是服务器上的分支,因为我们还没有推送上去
  • 右键版本4,重置分支1的位置
  • 修改Unity,将材质调成蓝的
  • 暂存,保存成版本6
  • 这样就一目了然了

  • Git遵循这些定理:

    • 如果存档是直线式的,必须保证最后版本上至少有一个分支
    • 如果存档是叉树式的,必须保证该叉树上的最后版本上至少有一个分支
    • 开辟叉树的时候一定要新建一个分支,用来保护这个叉树
  • 双击左边检视面板的某个分支,Unity会自动跳转到分支下的版本的样子

  • 问题又来了,我只想查看每个版本里的文件,不想建那么多复杂的分支怎么办

  • 可以在想要跳转的版本那里右键,检出

  • 会提示一个信息,意思是:你只能停留在分支上,而检出时会创建一个叫 HEAD 的标签,来替代停留的分支,如果再双击左边检视面板的某个分支,你就会跳到分支上,HEAD会被移除
  • 它的提示里有一句话很重要:“除非你后面创建一个新分支”,提示了如果检出,想要在检出上发展新版本,就必须要新建个分支来保存这个版本
  • 因为Git控制了工程版本,Unity也会做出反映,要你重新加载(现在在版本3)
  • 新建分支2来保存

合并

  • 这里还有一个合并的功能,但是在这里不太顶用,但是在修改文本文件时还算可以
  • 双击main分支,点合并,这里选择与版本7合并
  • 它一定会提示你发生冲突,没有冲突的情况特别少
  • 点击未暂存文件夹,右边就可以看见冲突代码
  • 如果单说是脚本修改的话,那还好说,因为它用这种方法来表示冲突:
1
2
3
4
5
+ <<<<<<< HEAD
目前所在分支的代码
+ =======
要与之合并的分支的代码
+ >>>>>>> 要合并的分支名
  • 只留下需要的代码,这些等号和尖括号什么都要删掉(好他马奇怪)
  • (如果不想要这些合并纠错,可以点顶上的丢弃)
  • 于是我把等号和尖括号都删掉了
  • 而且事实证明,在vscode里这种东西更好修改(但是vscode没有很图形化的git表达)
    • 比如说要保留某一方的修改或者保留双方时,按个键就行了(这才是可视化)
    • 所以推荐这个vscode(vscode天下第一!)
  • 这时我们提交以下这个合并,让这个合并保存成一个新版本
  • 很明显,左边的图谱很直白了,版本3和版本7合并了
  • 但是Unity报错了,说明这种场景文件的冲突不要乱合并,因为这种代码不是给人看的,所以要避免这种非代码的合并 (但Unity里至少有些效果)
  • 回退这个合并的气人版本,再丢弃合并信息
  • 最后我们再推送上去(分支要一个一个推)
  • 就是这么用的