commit
cac7048bab
@ -17,7 +17,7 @@ To be successful in DevOps you have to have a good knowledge of programming skil
|
|||||||
|
|
||||||
## Understand why you need to learn a programming language.
|
## Understand why you need to learn a programming language.
|
||||||
|
|
||||||
The reason that Python and Go are recommended so often for DevOps engineers is that a lot of the DevOps tooling is written in either Python or Go, which makes sense if you are going be build DevOps tools. Now this is important as this will determine really what you should learn and that would likely be the most beneficial. If you are going to be building DevOps tools or you are joining a team that does then it would make sense to learn that same language, if you are going to be heavily involved in Kubernetes or Containers then it's more than likely that you would want to choose Go as your programming language. For me, the company I work for (Kasten by Veeam) is in the Cloud-Native ecosystem focused on data management for Kubernetes and everything is written in Go.
|
The reason that Python and Go are recommended so often for DevOps engineers is that a lot of the DevOps tooling is written in either Python or Go, which makes sense if you are going to be building DevOps tools. Now this is important as this will determine really what you should learn and that would likely be the most beneficial. If you are going to be building DevOps tools or you are joining a team that does then it would make sense to learn that same language, if you are going to be heavily involved in Kubernetes or Containers then it's more than likely that you would want to choose Go as your programming language. For me, the company I work for (Kasten by Veeam) is in the Cloud-Native ecosystem focused on data management for Kubernetes and everything is written in Go.
|
||||||
|
|
||||||
But then you might not have clear cut reasoning like that to choose you might be a student or transitioning careers with no real decision made for you. I think in this situation then you should choose the one that seems to resonate and fit with the applications you are looking to work with.
|
But then you might not have clear cut reasoning like that to choose you might be a student or transitioning careers with no real decision made for you. I think in this situation then you should choose the one that seems to resonate and fit with the applications you are looking to work with.
|
||||||
|
|
||||||
|
@ -1,173 +1,173 @@
|
|||||||
---
|
---
|
||||||
title: '#90DaysOfDevOps - Gitting to know Git - Day 37'
|
title: '#90DaysOfDevOps - Git 入門 - 第 37 天'
|
||||||
published: false
|
published: false
|
||||||
description: 90DaysOfDevOps - Gitting to know Git
|
description: 90DaysOfDevOps - Git 入門
|
||||||
tags: "devops, 90daysofdevops, learning"
|
tags: "devops, 90daysofdevops, learning"
|
||||||
cover_image: null
|
cover_image: null
|
||||||
canonical_url: null
|
canonical_url: null
|
||||||
id: 1048707
|
id: 1048707
|
||||||
---
|
---
|
||||||
## Gitting to know Git
|
## Git 入門
|
||||||
|
|
||||||
Apoligies for the terrible puns in the title and throughout. I am surely not the first person to turn Git into a dad joke!
|
本篇的作者在這裡玩了個諧音梗,把英文的 Getting to know Git 改寫成 Gitting to know Git。
|
||||||
|
|
||||||
In the last two posts we learnt about version control systems, and some of the fundamental workflows of git as a version control system [Day 35](day35.md) Then we got git installed on our system, updated and configured. We also went a little deeper on the theory between Client-Server version control system and Git which is a distributed version control system [Day 36](day36.md).
|
在前兩篇文章中我們學習了有關版本控制,[第35天](day35.md)講到 Git 做為一個版本控制系統具有哪些基本的工作流程。[第36天](day36.md)講到如何安裝、更新和設定,更稍稍地深入探討主從式和分佈式版本控制系統 Git 之間的理論。
|
||||||
|
|
||||||
Now we are going to run through some of the commands and use cases that we will all commonly see with git.
|
現在,我們將迅速帶過在 Git 常見的指令和使用案例。
|
||||||
|
|
||||||
### Where to git help with git?
|
### 何處取得Git文件?
|
||||||
|
|
||||||
There is going to be times where you just cannot remember or just don't know the command you need to get things done with git. You are going to need help.
|
有時候你會忘記或是不曉得要用什麼 Git 指令來達到你要的需求。這時候你會需要幫助。
|
||||||
|
|
||||||
It goes without saying that google or any search engine is likely to be your first port of call when searching help.
|
不用說通常大家都會優先用 Google 或任何的搜尋引擎尋找你要的答案。
|
||||||
|
|
||||||
Secondly the next place is going to be the official git site and the documentation. [git-scm.com/docs](http://git-scm.com/docs) Here you will find not only a solid reference to all the commands available but also lots of different resources.
|
第二種方法是你也能到 Git 官方網站取得文件說明。 [git-scm.com/docs](http://git-scm.com/docs) 連結裡不僅可以找到所有命令的參考資訊,還能找到不同的資源(如下圖)。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
We can also access this same documentation which is super useful if you are without connectivity from the terminal. If we chose the `git add` command for example we can run `git add --help` and we see below the manual.
|
從終端機上也有跟 Git 官方網站相同的說明。如果我們要用指令`git add`,但是不確定使用方式時就能夠輸入`git add --help`來取得說明。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
We can also in the shell use `git add -h` which is going to give us a short summary of the options we have available.
|
我們也可以輸入指令`git add -h`來取得簡潔的說明。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Myths surrounding Git
|
### 圍繞在 Git 的神話
|
||||||
|
|
||||||
"Git has no access control" - You can empower a leader to maintain source code.
|
"Git 沒有存取控制功能" - 但你可以授權一名領導者維護原始碼。
|
||||||
|
|
||||||
"Git is too heavy" - Git has the ability to provide shallow repositories which basically means a reduced amount of history if you have large projects.
|
"Git 太肥" - 如果你有大型的專案,Git 有能力提供淺層儲存庫,基本上這意味著它能夠減少歷史的紀錄。
|
||||||
|
|
||||||
### Real shortcomings
|
### 真正的缺點
|
||||||
|
|
||||||
Not ideal for Binary files. Great for source code but not great for executable files or videos for example.
|
不適合用在二進位檔案。Git 適合用在原始碼,如果是執行檔或影片就不建議。
|
||||||
|
|
||||||
Git is not user friendly, the fact that we have to spend time talking about commands and functions of the tool is probably a key sign of that.
|
Git 對使用的人並不友善,事實上我們必須花費時間討論命令和功能怎麼使用。
|
||||||
|
|
||||||
Overall though, git is hard to learn, but easy to use.
|
整理來說,Git 難學好用。
|
||||||
|
|
||||||
### The git ecosystem
|
### Git 生態系統
|
||||||
|
|
||||||
I want to briefly cover the ecosystem around git but not deep dive into some of these areas but I think its important to note these here at a high level.
|
我想要從宏觀的角度來介紹環繞在 Git 間的生態系統,但是我不會深入探討其中的一些領域。
|
||||||
|
|
||||||
Almost all modern development tools support Git.
|
幾乎所有的開發工具都支援 Git。
|
||||||
|
|
||||||
- Developer tools - We have already mentioned visual studio code but you will find git plugins and integrations into sublime text and other text editors and IDEs.
|
- 開發工具 - 我們曾經提到微軟的 visual studio code 有支援,其他的文字編輯器像是 sublime text 也有提供外掛整合 Git。
|
||||||
|
|
||||||
- Team tools - Also mentioned around tools like Jenkins from a CI/CD point of view, Slack from a messaging framework and Jira for project management and issue tracking.
|
|
||||||
|
|
||||||
- Cloud Providers - All the large cloud providers support git, Microsoft Azure, Amazon AWS, Google Cloud Platform.
|
- 團隊工具 - 用來做持續整合/持續佈署的 Jekins, Slack 的訊息框架和專案管理/問題追蹤系統 Jira。
|
||||||
|
|
||||||
- Git-Based services - Then we have the GitHub, GitLab and BitBucket of which we will cover in more detail later on. I have heard these services as the social network for code!
|
|
||||||
|
|
||||||
### The Git Cheatsheet
|
- 雲端供應商 - 所有的雲端供應商都有支援 Git,Microsoft Azure、Amazon AWS、Google Cloud Platform。
|
||||||
|
|
||||||
We have not covered most of these commands but having looked at some cheatsheets available online I wanted to document some of the git commands and what their purpose are. We don't need to remember these all, and with more hands on practice and using you will pick at least the git basics.
|
- 基於Git的服務 - GitHub、GitLab 和 BitBucket 之後會有更詳盡的探討。我聽過這些服務是程式碼的社交網路!
|
||||||
|
|
||||||
I have taken these from [atlassian](https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet) but writing them down and reading the description is a good way to get to know what the commands are as well as getting hands on in every day tasks.
|
### Git Cheatsheet
|
||||||
|
|
||||||
### Git Basics
|
我們沒有列出大部分可用的指令,看過一些線上的 Git cheatsheets之後,我紀錄一些指令和其目的。你並不需要記下所有的指令,你只要頻繁的使用自然而然就會記得。
|
||||||
|
|
||||||
| Command | Example | Description |
|
我從 [atlassian](https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet) 連結抄寫上面的指令和說明,就像是每天親身參與的日常任務,這也是了解 Git 指令的一種好方法。
|
||||||
| --------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| git init | `git init <directory>` | Create an empty git repository in specified directory. |
|
|
||||||
| git clone | `git clone <repo>` | Clone repository located at <repo> onto local machine. |
|
|
||||||
| git config | `git config user.name` | Define author name to be used for all commits in current repository `system`, `global`, `local` flag to set config options. |
|
|
||||||
| git add | `git add <directory>` | Stage all changes in <directory> for the next commit. We can also add <files> and <.> for everything. |
|
|
||||||
| git commit -m | `git commit -m "<message>"` | Commit the staged snapshot, use <message> to detail what is being committed. |
|
|
||||||
| git status | `git status` | List files that are staged, unstaged and untracked. |
|
|
||||||
| git log | `git log` | Display all commit history using the default format. There are additional options with this command. |
|
|
||||||
| git diff | `git diff` | Show unstaged changes between your index and working directory. |
|
|
||||||
|
|
||||||
### Git Undoing Changes
|
### Git 基本操作
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| --------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
| --------------- | ----------------------------- | ----------------------------------------------------------------------------------- |
|
||||||
| git revert | `git revert <commit>` | Create a new commit that undoes all of the changes made in <commit> then apply it to the current branch. |
|
| git init | `git init <directory>` | 在指定的資料夾上建立一個空的 Git 儲存庫。 |
|
||||||
| git reset | `git reset <file>` | Remove <file> from the staging area, but leave the working directory unchanged. This unstages a file without overwriting any changes. |
|
| git clone | `git clone <repo>` | 將遠端的儲存庫複製到自己的電腦上。 |
|
||||||
| git clean | `git clean -n` | Shows which files would be removed from the working directory. Use `-f` in place of `-n` to execute the clean. |
|
| git config | `git config user.name` | 為目前的儲存庫定義每次提交時用的作者名,可增加配置選項`system`、`global`、`local` |
|
||||||
|
| git add | `git add <directory>` | 將檔案或目錄加入索引。也可以輸入 <.> 索引所有的檔案。 |
|
||||||
|
| git commit -m | `git commit -m "<message>"` | 將索引的檔案提交出去,-m 加入註解。 |
|
||||||
|
| git status | `git status` | 列出那些檔案已索引、未索引、未追蹤。 |
|
||||||
|
| git log | `git log` | 用預設格式列出所有提交的歷史紀錄,這個指令有其他選項可用。 |
|
||||||
|
| git diff | `git diff` | 列出你的工作目錄和索引之間有何差異。 |
|
||||||
|
|
||||||
|
### Git Undoing Changes
|
||||||
|
|
||||||
|
| 指令 | 範例 | 描述 |
|
||||||
|
| ------------ | ----------------------- | ------------------------------------------------------------------------------------------- |
|
||||||
|
| git revert | `git revert <commit>` | 進行反向處理,回復該次提交的異動,並建立新的提交。 |
|
||||||
|
| git reset | `git reset <file>` | 還原暫存區到最近提交的版本,但是不變動工作目錄的檔案。 這將會取消暫存文件而不做任何覆蓋。 |
|
||||||
|
| git clean | `git clean -n` | 列出那些檔案會從你的工作目錄刪除。`-n`改成`-f`就會真正執行刪除。 |
|
||||||
|
|
||||||
### Git Rewriting History
|
### Git Rewriting History
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| --------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
| ------------ | ---------------------- | --------------------------------------------------------------------------------------------------------------- |
|
||||||
| git commit | `git commit --amend` | Replace the last commit with the staged changes and last commit combined. Use with nothing staged to edit the last commit’s message. |
|
| git commit | `git commit --amend` | 將變更過的暫存區和最後的提交合併後取代最後一次的提交。 如果暫存區沒有變更就可以修改註解。 |
|
||||||
| git rebase | `git rebase <base>` | Rebase the current branch onto <base>. <base> can be a commit ID, branch name, a tag, or a relative reference to HEAD. |
|
| git rebase | `git rebase <base>` | 重新定義現在的分支,將現在分支嫁接到其他分支,目標可以是一個 ID、分支名稱、一個標籤或一個 HEAD 的相對參考點。 |
|
||||||
| git reflog | `git reflog` | Show a log of changes to the local repository’s HEAD. Add --relative-date flag to show date info or --all to show all refs. |
|
| git reflog | `git reflog` | 顯示本機儲存庫HEAD變動的歷史紀錄。加配置選項 --relative-date 可以顯示日期,加 --all 顯示所有的參照. |
|
||||||
|
|
||||||
### Git Branches
|
### Git Branches
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| --------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
| -------------- | ---------------------------- | --------------------------------------------------------------- |
|
||||||
| git branch | `git branch` | List all of the branches in your repo. Add a <branch> argument to create a new branch with the name <branch>. |
|
| git branch | `git branch` | 列出儲存庫上所有的分支。再加一個變數名字則可以建立新分支。 |
|
||||||
| git checkout | `git checkout -b <branch>` | Create and check out a new branch named <branch>. Drop the -b flag to checkout an existing branch. |
|
| git checkout | `git checkout -b <branch>` | 創建一個新的分支。 移除參數 -b 則用來切換一支已經存在的分支。 |
|
||||||
| git merge | `git merge <branch>` | Merge <branch> into the current branch. |
|
| git merge | `git merge <branch>` | 合併到現在的分支。 |
|
||||||
|
|
||||||
### Git Remote Repositories
|
### Git Remote Repositories
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| --------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
| ---------------- | ------------------------------- | ------------------------------------------------------------------------------ |
|
||||||
| git remote add | `git remote add <name> <url>` | Create a new connection to a remote repo. After adding a remote, you can use <name> as a shortcut for <url> in other commands. |
|
| git remote add | `git remote add <name> <url>` | 為遠端的倉儲庫建立簡稱,方便之後進行推送。 |
|
||||||
| git fetch | `git fetch <remote> <branch>` | Fetches a specific <branch>, from the repo. Leave off <branch> to fetch all remote refs. |
|
| git fetch | `git fetch <remote> <branch>` | 取回指定分支的更新。如果沒有指定則取回所有的更新到索引,工作目錄不會被更動。 |
|
||||||
| git pull | `git pull <remote>` | Fetch the specified remote’s copy of current branch and immediately merge it into the local copy. |
|
| git pull | `git pull <remote>` | 取回指定分支的更新,並且立即更新工作目錄上的檔案。 |
|
||||||
| git push | `git push <remote> <branch>` | Push the branch to <remote>, along with necessary commits and objects. Creates named branch in the remote repo if it doesn’t exist. |
|
| git push | `git push <remote> <branch>` | 將你提交的檔案推送到遠端。如果遠端不存在推送的分支,將會建立新的分支。 |
|
||||||
|
|
||||||
### Git Diff
|
### Git Diff
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| --------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
| ------------------- | --------------------- | ---------------------------------------- |
|
||||||
| git diff HEAD | `git diff HEAD` | Show difference between working directory and last commit. |
|
| git diff HEAD | `git diff HEAD` | 比對最新的提交和工作目錄內的檔案內容。 |
|
||||||
| git diff --cached | `git diff --cached` | Show difference between staged changes and last commit |
|
| git diff --cached | `git diff --cached` | 比對最新的提交和索引內的檔案內容。 |
|
||||||
|
|
||||||
### Git Config
|
### Git Config
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| ----------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ----------------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
||||||
| git config --global user.name <name> | `git config --global user.name <name>` | Define the author name to be used for all commits by the current user. |
|
| git config --global user.name<name> | `git config --global user.name <name>` | 為系統現在登入的帳號定義每次使用 Git 提交時所用的作者名。 |
|
||||||
| git config --global user.email <email> | `git config --global user.email <email>` | Define author email to be used for all commits by the current user. |
|
| git config --global user.email<email> | `git config --global user.email <email>` | 為系統現在登入的帳號定義每次使用 Git 提交時所用的信箱。 |
|
||||||
| git config --global alias <alias-name> <git-command> | `git config --global alias <alias-name> <git-command>` | Create shortcut for a git command . |
|
| git config --global alias<alias-name> <git-command> | `git config --global alias <alias-name> <git-command>` | 幫 Git 指令建立簡稱。 |
|
||||||
| git config --system core.editor <editor> | `git config --system core.editor <editor>` | Set the text editor to be used by commands for all users on the machine. <editor> arg should be the comamnd that launches the desired editor. |
|
| git config --system core.editor<editor> | `git config --system core.editor <editor>` | 為所有的系統帳戶設定 Git 預設的文字編輯器,當 Git 需要輸入訊息的時候會用到。<editor> 參數應該指向系統有的文字編輯器。 |
|
||||||
| git config --global --edit | `git config --global --edit ` | Open the global configuration file in a text editor for manual editing. |
|
| git config --global --edit | `git config --global --edit ` | 用文件編輯器開啟全域的 Git 設定檔。 |
|
||||||
|
|
||||||
### Git Rebase
|
### Git Rebase
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| ------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------ |
|
||||||
| git rebase -i <base> | `git rebase -i <base>` | Interactively rebase current branch onto <base>. Launches editor to enter commands for how each commit will be transferred to the new base. |
|
| git rebase -i<base> | `git rebase -i <base>` | 用非互動的方式將現在的分支嫁接到其他分支。另外啟動文字編輯器提供輸入每次提交時如何轉移到新的分支上。 |
|
||||||
|
|
||||||
### Git Pull
|
### Git Pull
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| ------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --------------------------- | ------------------------------ | ------------------------------------------------ |
|
||||||
| git pull --rebase <remote> | `git pull --rebase <remote>` | Fetch the remote’s copy of current branch and rebases it into the local copy. Uses git rebase instead of merge to integrate the branches. |
|
| git pull --rebase<remote> | `git pull --rebase <remote>` | 抓取放在遠端的分支並且嫁接在現在的工作目錄上。 |
|
||||||
|
|
||||||
### Git Reset
|
### Git Reset
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | 描述 |
|
||||||
| ------------------------- | --------------------------| --------------------------------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------- | ----------------------------- | -------------------------------------------------------------------------- |
|
||||||
| git reset | `git reset ` | Reset staging area to match most recent commit, but leave the working directory unchanged. |
|
| git reset | `git reset ` | 還原暫存區到最近提交的版本,但是不變動工作目錄的檔案。 |
|
||||||
| git reset --hard | `git reset --hard` | Reset staging area and working directory to match most recent commit and overwrites all changes in the working directory |
|
| git reset --hard | `git reset --hard` | 還原暫存區和工作目錄到最新提交的版本,即使工作目錄有變更也會還原。 |
|
||||||
| git reset <commit> | `git reset <commit>` | Move the current branch tip backward to <commit>, reset the staging area to match, but leave the working directory alone |
|
| git reset<commit> | `git reset <commit>` | 還原暫存區到指定的版本,但是不變動工作目錄的檔案。 |
|
||||||
| git reset --hard <commit> | `git reset --hard <commit>` | Same as previous, but resets both the staging area & working directory to match. Deletes uncommitted changes, and all commits after <commit>. |
|
| git reset --hard<commit> | `git reset --hard <commit>` | 還原暫存區和工作目錄到指定的版本。刪除未提交的更改,以及之後的所有提交。 |
|
||||||
|
|
||||||
### Git Push
|
### Git Push
|
||||||
|
|
||||||
| Command | Example | Description |
|
| 指令 | 範例 | Description |
|
||||||
| ------------------------- | --------------------------| --------------------------------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||||
| git push <remote> --force | `git push <remote> --force` | Forces the git push even if it results in a non-fast-forward merge. Do not use the --force flag unless you’re absolutely sure you know what you’re doing. |
|
| git push<remote> --force | `git push <remote> --force` | 強迫推送即使會發生 non-fast-forward。不要用 --force 選項,除非你很清楚自己在做什麼。 |
|
||||||
| git push <remote> --all | `git push <remote> --all` | Push all of your local branches to the specified remote. |
|
| git push<remote> --all | `git push <remote> --all` | 將本地的分支推送到指令的遠端伺服器。 |
|
||||||
| git push <remote> --tags | `git push <remote> --tags` | Tags aren’t automatically pushed when you push a branch or use the --all flag. The --tags flag sends all of your local tags to the remote repo. |
|
| git push<remote> --tags | `git push <remote> --tags` | push 或加上 --all 選項,預設不會傳送標籤到遠端伺服器。加上 --tags 選項才會將本地的標籤推送到遠端儲存庫。 |
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [What is Version Control?](https://www.youtube.com/watch?v=Yc8sCSeMhi4)
|
- [What is Version Control?](https://www.youtube.com/watch?v=Yc8sCSeMhi4)
|
||||||
- [Types of Version Control System](https://www.youtube.com/watch?v=kr62e_n6QuQ)
|
- [Types of Version Control System](https://www.youtube.com/watch?v=kr62e_n6QuQ)
|
||||||
- [Git Tutorial for Beginners](https://www.youtube.com/watch?v=8JJ101D3knE&t=52s)
|
- [Git Tutorial for Beginners](https://www.youtube.com/watch?v=8JJ101D3knE&t=52s)
|
||||||
- [Git for Professionals Tutorial](https://www.youtube.com/watch?v=Uszj_k0DGsg)
|
- [Git for Professionals Tutorial](https://www.youtube.com/watch?v=Uszj_k0DGsg)
|
||||||
- [Git and GitHub for Beginners - Crash Course](https://www.youtube.com/watch?v=RGOj5yH7evk&t=8s)
|
- [Git and GitHub for Beginners - Crash Course](https://www.youtube.com/watch?v=RGOj5yH7evk&t=8s)
|
||||||
- [Complete Git and GitHub Tutorial](https://www.youtube.com/watch?v=apGV9Kg7ics)
|
- [Complete Git and GitHub Tutorial](https://www.youtube.com/watch?v=apGV9Kg7ics)
|
||||||
- [Git cheatsheet](https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet)
|
- [Git cheatsheet](https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet)
|
||||||
|
|
||||||
|
|
||||||
See you on [Day 38](day38.md)
|
See you on [第 38 天](day38.md)
|
Loading…
Reference in New Issue
Block a user