├── 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 | ![git-win-setup](https://github.com/JI-git-workshop/git-intro/blob/master/img/git-win-setup.png) 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 | ![ssh-1](https://github.com/JI-git-workshop/git-intro/blob/master/img/ssh-1.png) 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 | ![ssh-2](https://github.com/JI-git-workshop/git-intro/blob/master/img/ssh-2.png) 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 | 这样还是不行的话。。。。 --------------------------------------------------------------------------------