├── python.pdf
├── img
├── ssh-1.png
├── ssh-2.png
├── ssh-3.png
├── ssh-4.png
├── ssh-5.png
├── kraken.png
├── tree-1.png
├── tree-2.png
├── confirm-1.png
├── confirm-2.png
├── confirm-3.png
├── sourcetree.png
├── git-win-setup.png
└── github-sign.png
├── LICENSE
└── README.md
/python.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/python.pdf
--------------------------------------------------------------------------------
/img/ssh-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/ssh-1.png
--------------------------------------------------------------------------------
/img/ssh-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/ssh-2.png
--------------------------------------------------------------------------------
/img/ssh-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/ssh-3.png
--------------------------------------------------------------------------------
/img/ssh-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/ssh-4.png
--------------------------------------------------------------------------------
/img/ssh-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/ssh-5.png
--------------------------------------------------------------------------------
/img/kraken.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/kraken.png
--------------------------------------------------------------------------------
/img/tree-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/tree-1.png
--------------------------------------------------------------------------------
/img/tree-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/tree-2.png
--------------------------------------------------------------------------------
/img/confirm-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/confirm-1.png
--------------------------------------------------------------------------------
/img/confirm-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/confirm-2.png
--------------------------------------------------------------------------------
/img/confirm-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/confirm-3.png
--------------------------------------------------------------------------------
/img/sourcetree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/sourcetree.png
--------------------------------------------------------------------------------
/img/git-win-setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/git-win-setup.png
--------------------------------------------------------------------------------
/img/github-sign.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JI-git-workshop/git-intro/HEAD/img/github-sign.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 JI-git-workshop
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Git Intro
2 | 2020 JI Git Workshop all in one.
3 |
4 | ## 课前准备
5 |
6 | 考虑到有些东西没梯子要下到明年,所以提前为大家提供了各种资料:[下载地址](https://jbox.sjtu.edu.cn/l/SHwJC3)
7 |
8 | 有梯子的同学自己去下也可以(相信有梯子同学的水平)。
9 |
10 | 建议你对命令行的基本使用提前有一定的理解,虽然这个workshop不会过多的使用命令行,不看的话问题也不大。这里提供简短的教程:
11 |
12 | * [MIT某门课程](https://missing.csail.mit.edu/2020/course-shell/)
13 |
14 | * 自行百度(cmd和其他shell会有细微差别,我也没办法给出教程)
15 | * 在这个项目的根目录你还会发现一个叫`python.pdf`的文档,这是我很久以前写的一个python入门教程,里面有一点关于命令行的介绍(有兴趣可以看看
16 |
17 | Git教程推荐:
18 |
19 | * [一个交互式教程](https://learngitbranching.js.org/)(推荐)
20 |
21 | * [非官方文字教程](https://www.liaoxuefeng.com/wiki/896043488029600)(推荐)
22 | * [菜鸟学堂](https://www.runoob.com/w3cnote/git-five-minutes-tutorial.html)
23 | * [官方教程](https://git-scm.com/book/zh/v2)
24 |
25 | ### 安装Git
26 |
27 | #### Windows安装
28 |
29 | 找到适合自己系统的版本(32位或64位),运行安装程序即可。安装设置一路next下去即可,只要保证环境变量那一页的设置是第二个就行了。
30 |
31 | 
32 |
33 | #### Mac安装
34 |
35 | * 先打开你的terminal尝试输入`git --version`并回车,如果能显示出版本号说明git已经安装(某些版本的mac自带了git),就可以跳过这一部分了。
36 | * 在你的terminal运行`xcode-select --install`安装`Xcode Command Line Tools`。这是Apple官方的一整套开发工具(还包含了gcc,g++)等工具,**推荐使用该方法下载**。下载时间可能较长,建议睡前插着电源让它下载。
37 | * 找到资料包里mac版本的git安装程序,并运行即可。(如果跳出该软件不安全,请前往`设置->安全性与隐私->通用`允许安装包运行。
38 |
39 | #### linux安装
40 |
41 | 参考https://www.git-scm.com/download/linux
42 |
43 | 会用linux的同学相信你们的水平。
44 |
45 | #### 验证安装
46 |
47 | 安装完成后,打开你的命令行(windows是cmd或者powershell,mac和linux叫terminal),输入`git --version`并回车,如果能看到一行git的版本号说明安装成功。
48 |
49 | ### 注册一个Github账号
50 |
51 | 由于其他网站Orgnization人数受限,为了演示和实践方便还是请大家注册一个Github账号。(国内上这个网站比较慢,但是等一会还是能出来的,推荐chrome或者firefox浏览器,别用IE就行。有梯子的同学可以开起来了)
52 |
53 | 前往[Github](https://github.com)创建一个账号(Sign Up):
54 |
55 |
56 |
57 |
58 |
59 | ### 简单配置Git
60 |
61 | > Note: 从这一步开始,windows用户建议在桌面右键,然后在菜单里面选择**Git Bash Here**。这是一个刚刚下载下来的git自带的命令行。linux和mac还是使用系统自带的terminal。
62 |
63 | #### 配置用户名和密码
64 |
65 | 打开命令行,输入以下两条命令(输一条敲一次回车):
66 |
67 | ```bash
68 | git config --global user.name "your_username"
69 | git config --global user.email "your@email.com"
70 | ```
71 |
72 | 注意,`your_username`替换为你刚刚Github账号的用户名,`your@email.com`替换为你注册用的邮箱。(外面的双引号还是要的)
73 |
74 | ### 配置ssh-key并关联Github
75 |
76 | windows用户如果这步没法成功,可以通过安装Sourcetree来拯救你。
77 |
78 | #### 生成ssh-key
79 |
80 | 简单来说,这一步是为了能让Github验证你的身份,让你能顺利的下载和上传代码。ssh-key是一种密码,通常保存在两个文件中,分别是私钥和公钥。公钥分享给他人,用于验证你的身份;私钥需要自己妥善保存,不可分享给他人。
81 |
82 | 同样还是在命令行里,运行:
83 |
84 | ```bash
85 | ssh-keygen -t rsa -C "your@email.com"
86 | ```
87 |
88 | 同样的这里要替换成你刚刚注册用的邮箱。然后会要你依次输入一些信息,如果你不想管,可以一路enter下去。这些依次输入参数的具体含义如下:
89 |
90 | * 保存ssh-key文件的路径:默认在~/.ssh下,如果你记不住就不要改。
91 | * Passphrase:密码,一般没什么用,只有在某些需要用到你的key的时候需要输入。一般留空即可。
92 | * 确认Passphrase:如果上一步设置了密码,就再打一遍确认。
93 |
94 | 
95 |
96 | 当你看到一串奇怪的字符画出现的时候,说明你创建成功了。
97 |
98 | #### 上传ssh-key
99 |
100 | 首先,你需要找到你刚刚创建的key。依次运行以下两条命令:
101 |
102 | ```bash
103 | cd ~/.ssh
104 | cat id_rsa.pub
105 | ```
106 |
107 | 意义分别是:
108 |
109 | * `cd ~/.ssh`: 进入一个叫`.ssh`的文件夹,前面的`~`代表你的用户目录。(如果你是windows且使用了cmd,打开一个新的cmd并且`cd .ssh`即可)
110 | * `cat id_rsa.pub`: 显示文件`id_rsa.pub`的内容,也就是你的公钥。(如果使用了cmd,请将cat换成type)
111 |
112 | 
113 |
114 | 然后,登陆到Github,去右上角找到你的账号settings里的SSH and GPG keys,选择增加一个新的ssh-key,title可以随便输入你喜欢的名字,底下的打输入框中,复制你刚刚在命令行中打印出来的公钥内容(从"ssh-rsa"开始一直到你的邮箱结束)。然后点击底部按钮即可添加完成。
115 |
116 | > Note: 不要复制成你的私钥`id_rsa`。私钥比公钥要长的多。
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 | #### 验证一下
125 |
126 | 然后我们简单的验证一下。还是在页面右上角,点击那个加号,选择New Repository,新建一个代码仓库。
127 |
128 |
129 |
130 | `Repository name`是你的项目名字,不可以有空格。`Description`是你的项目描述。`Public`代表任何人都能看到这个项目,`Private`代表只有你自己能看到这个项目。最后,建议选择“Initialize this repository with a README”,这样项目创建的时候会自己带一个Readme文件。
131 |
132 |
133 |
134 | 然后会跳转到新项目的主页,找到页面上唯一一个绿色按钮,点下去,然后再点图中的按钮,将你的项目地址复制到剪贴板。
135 |
136 | > 这里尽量复制以git@开头的地址,如果你默认显示的地址是https开头的,点use SSH就可以看见了。
137 |
138 |
139 |
140 | 最后,回到你的命令行,依次运行以下命令(#号后面的不用复制):
141 |
142 | ```bash
143 | cd ~/Desktop # 进入桌面
144 | git clone # clone你刚刚创建的项目
145 | ```
146 |
147 | 注意``要替换成你刚刚复制的项目地址,**不要有尖括号或者双引号**。
148 |
149 | 可能会跳出来一个问你是否继续连接的提示,输入`yes`并回车就好了。
150 |
151 | 然后过了一会,等它运行完成,你就会在桌面上看到一个以你项目为名字的文件夹,内容就是你刚刚创建的项目。至此,说明你安装并配置Git成功了。
152 |
153 | 现在,**你已经可以使用命令行来操作git并完成所有的版本控制的功能了**。
154 |
155 | ### 安装一个你喜欢的Git GUI
156 |
157 | Git GUI简单来说就是**一类**可以免去你敲命令行的痛苦的桌面软件。它与Git的关系仅仅是锦上添花,没有GUI软件你照样可以用命令行里的Git完成所有操作。当然GUI软件会增加一些实用的工具。
158 |
159 | > GUI软件仅仅是一层壳,它所进行的所有操作仍然是在背后默默的调用命令行里的`git`命令。
160 |
161 | 这里推荐的GUI有两个:
162 |
163 | * Sourcetree (Windows, Mac)
164 | * GitKraken (Windows, Mac, Linux)
165 |
166 | 这两个总体的界面比较好看,而且易于操作,较为稳定,而且都是免费的。(当然会有付费功能但是不大用得到)
167 |
168 | 到上面的资料包里面找到对应的版本,然后一步步安装就好了。(还是推荐sourcetree,演示会用,但是GitKraken操作其实是一样的)
169 |
170 | * Sourcetree界面:
171 |
172 |
173 |
174 | * GitKraken界面:
175 |
176 |
177 |
178 | P.S:其实GitKraken的功能强大一点,但是之前它突然开始恰饭了,我就弃用了,改用Sourcetree。但是现在GitKraken好像又不恰饭了💩,所以还是推荐给大家。
179 |
180 | ### 加入Organization
181 |
182 | 我创建了一个用来教学和用于Practice的Github组织,你也可以自己创建。
183 |
184 | Organization地址:[点这](https://github.com/JI-git-workshop)
185 |
186 | 完成了上面的课前准备后,请加入这个组织。请将你**注册Github的邮箱地址**发送至我的邮箱: nichujie@sjtu.edu.cn,邮件标题以`[git]`开头。记得查看邮箱,会有邮件让你确认加入组织。
187 |
188 | ### 扩展练习
189 |
190 | 待你加入了这个组织后,尝试使用上面的命令(或者GUI)将本项目clone到你的本地(电脑)。
191 |
192 | 下了Sourcetree的,先会让你注册个叫Atlassian账号的,这个网站可能比较慢,开梯子或者多等等就行了。然后进去之后可能还会让你配置下Github账号什么的,照着做就行了。
193 |
194 | 下GitKraken的,进去就有通过Github登陆的选项,选那个就可以了。
195 |
196 | ### 关于Sourcetree初始化&添加ssh-key
197 |
198 | #### 如果你前面生成ssh-key成功了
199 |
200 | 请前往`工具->选项->一般`里,将默认的ssh客户端换成`OpenSSH`,选择你刚刚生成的密钥对中的**私钥(id_rsa)**,并**重启sourcetree**。一般默认的路径就是对的,不用改。
201 |
202 |
203 |
204 |
205 |
206 | #### 如果生成失败了
207 |
208 | 参考[这一篇](https://blog.csdn.net/z1067832450_/article/details/89301751),使用Sourcetree自带的putty生成密钥并上传至Github。
209 |
210 | **注:这个教程里是上传到Gitlab,但前面生成putty密钥是一样的,后面换成上传到GitHub就行了,也就是本文前面的步骤。**
211 |
212 | p.s. 如果这样还是失败,请到设置界面的验证(或者账户)里面,尝试添加你的GitHub账号,验证方式选择OAuth会让你去GitHub登陆,选择Basic的话会直接让你输入用户名密码。
213 |
214 | 这样还是不行的话。。。。
--------------------------------------------------------------------------------