Git和GitHub基礎教學

文章目錄

  • 1. 前言
  • 2. 歷史
  • 3. 下載安裝Git
    • 3.1 下載Git
    • 3.2 安裝Git
    • 3.3 驗證安裝是否成功
  • 4. 配置Git
  • 5. Git基礎使用
    • 5.1 通過Git Bash使用
      • 5.1.1 創建一個新的倉庫。
        • 5.1.1.1 克隆別人的倉庫
        • 5.1.1.2 自己創建一個本地倉庫
      • 5.1.2 管理存檔
    • 5.2 通過Visual Studio Code使用
  • 6. Git完成遠程提交
    • 6.1 Git Bash版本
    • 6.2 Visual Studio Code版本

1. 前言

當你寫代碼的時候一定遇到過自己需要對代碼進行很多改動,結果改動完發現有很多報錯,于是我們想回到之前的某個狀態的代碼的情況。如果是本地的一些項目我會對代碼進行一個“存檔”的操作(很多游戲會提供存檔的選項從而保存玩家的進度,玩家可以“讀檔”從而恢復到該存檔所保存的進度),我會將我的代碼ctrl+a然后ctrl+c,打開我的記事本ctrl+v,完成了一遍存檔,如果我需要保存新的我只需要再打開一個新的。如果我想要讀取某個存檔,我只需要將記事本的代碼放到我的ide中。
這就是一個簡單的代碼存檔管理,我們可以將我們的代碼的一些“關鍵點”進行保存,然后當我們的代碼出現一些問題的時候,我們可以讀取這些“關鍵點”,返回到之前的進度重新進行改動。
但是這是我們一個人寫我們自己的代碼,萬一是一群人在一起進行一個合作,我們該怎么做呢?我們使用u盤互相傳一下我們的代碼嗎?這個方案當然是可以的,但很明顯有問題,效率比較低,你的團隊人越多,進行u盤同步進度的效率就會很慢。那我們就將各自的存檔都上傳到一個大家共享的網盤上吧。很快就會出現第一個問題:你們寫的是一個python代碼,這些網盤里的存檔都叫import numpy…你自己只能在本地找到自己的代碼,上面的很多存檔你看著會一頭霧水。還會有其他問題:這么多存檔,到底哪個是正式的最后的代碼?這里有的模塊可能代碼沒有添加,或者有些需要添加進去的但是和其他代碼有些沖突,一個代碼和另一個代碼到底有什么區別,這些都是可能出現的問題。
對于第一個問題,問題主要是沒有統一的規則,萬一代碼出現問題我們可能都不知道這個代碼是誰寫的,誰上傳的。所以最好這里存檔能有時間和上傳者的記錄,甚至為了解決后面說的代碼之間的改動,這個上傳者最好自己稍微闡述一下我做了什么。
第二個問題,這里有很多代碼,一般來說每個人會做一個模塊,然后我們最后講這些模塊放到一起形成最后的代碼,因此最后應該有一個人將這些模塊的代碼進行一個檢查。檢查沒有問題就放進最后的代碼之中,如果放進去后有問題也沒有關系,因為之前的代碼有存檔。所有的代碼都加進來之后,那我們的最后這個版本就確定了。
第三個問題,如果合作之中的代碼之間有一些沖突,最好這些沖突能被標記出來。就像游戲里兩個存檔可能有不同的道具,有一種同步方案那便是兩邊的東西都保存,也可能是最后是保存某一種存檔。
那這些功能都是可以被Git實現的,這篇文章就將以游戲存檔的例子給大家介紹Git的使用。

2. 歷史

Git的歷史要從Linux之父Linus Torvalds說起。
Linus Torvalds作為Linux之父,當然生完孩子Linux后就不能放任不管了,所以在 2002 年之前,Linux內核的維護工作主要依靠Linus Torvald等人手工檢查全球各地熱心開發者們提交的補丁,審核通過后就會將其手動加到Linux代碼之中,這種方式效率低下且容易出錯。因此Linus Torvalds等人需要找到一個解決方案。
下圖是Linux之父Linus Torvalds。
Linux之父
這個解決方案便是版本控制系統軟件,也就是前文中我們說的那種解決方案。當時Linus Torvalds選擇了BitKeeper來解決問題,但是這款軟件是一個商業收費軟件,2005年后該公司BitMover決定收回Linux內核社區的免費使用權。
數次磋商無果后,Linus Torvalds作為暴躁老哥就表示,不能辦就別辦了。二話不說擼起袖子就干,花了10天時間,開發了一個開源免費的版本控制系統軟件——Git,意思為“不愉快的人”,直接取代了BitKeeper,成為了當今世界上最為流行的版本控制工具。
在這里插入圖片描述

3. 下載安裝Git

3.1 下載Git

首先打開Git官網:Git官網
點擊這里的Download for Windows,這里的教學以默認的命令行界面git為例,下面的GUI版本提供了一個圖形用戶界面,使得用戶可以通過點擊和選擇來管理Git倉庫,而不需要手動輸入命令行指令,該教程不會聚焦于GUI版本。
在這里插入圖片描述
點擊后,會有多個版本進行安裝,上面的Standalone Installer是獨立安裝程序,通過運行安裝程序來安裝Git,它會在系統中創建相應的程序和環境變量,因此適合我們現在的需求。
而下面的Portable是便攜版,一般是如果我們需要放在一些移動介質所需要的版本,它的安裝過程不會將Git添加到系統目錄中,而是將所有文件都放在安裝目錄中。便攜版可以在沒有安裝過程的情況下直接運行,因此適合攜帶在便攜式存儲設備(如USB閃存驅動器)中使用,方便在不同計算機之間使用Git。
所以這里我們點擊64-bit Git for Windows Setup就好了。
在這里插入圖片描述
但是這里的下載速度會比較慢,可以科學上網解決。

3.2 安裝Git

下載完后,我們點開對應的安裝包,點擊Next。
在這里插入圖片描述
然后是選擇安裝目錄,這里需要注意安裝目錄里不能有中文。
然后點擊Next進入下一步。
在這里插入圖片描述
這一步可以不修改上面的選項,直接點擊Next下一步。
1.Additional icons(附加圖標):是否在桌面上創建 Git 的快捷方式圖標。
2.Windows Explorer integration(Windows 資源管理器集成):
Open Git Bash here(在此處打開 Git Bash): 是否在右鍵菜單中添加“在此處打開 Git Bash”選項。
Open Git GUI here(在此處打開 Git GUI): 是否在右鍵菜單中添加“在此處打開 Git GUI”選項。
3.Git LFS (Large File Support)(Git 大文件支持):
是否安裝 Git LFS 插件,用于支持大文件的版本控制。
4.Associate .git configuration files with the default text editor(將 .git 配置文件與默認文本編輯器關聯)**:
是否將 .git 配置文件與系統的默認文本編輯器關聯。
5.Associate .sh files to be run with Bash(將 .sh 文件與 Bash 關聯):
是否將 .sh 腳本文件與 Git Bash 關聯,以便可以直接運行。
6.Check daily for Git for Windows updates(每天檢查 Git for Windows 更新):
是否每天檢查 Git for Windows 的更新。
7.(NEW!) Add a Git Bash Profile to Windows Terminal(將 Git Bash 配置文件添加到 Windows 終端):
是否在 Windows 終端中添加 Git Bash 配置文件。
在這里插入圖片描述
這一步是創建開始菜單文件夾,也是直接點擊Next就好。
在這里插入圖片描述
這一步是選擇Git的默認編輯器,這里建議修改成Visual Studio Code,后文也將會以Visual Studio Code為例,選擇自己常用的ide即可,然后點擊Next。
在這里插入圖片描述
這一步是設置新倉庫中初始分支的名稱,上面是Git默認的master分支,下面可以是你自己選擇的分支名,一般是main,這里現在推薦你直接選擇下面的這一個就好,后面環節會對這里再進行詳細解釋。
在這里插入圖片描述
后面的設置幾乎不變,一直點擊Next就好。
這一步是對PATH環境的調整。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
這里點擊Install即可。
在這里插入圖片描述
點擊完后等待其安裝完畢。
這里點擊Finish后因為這里默認勾選了發行文檔,所以我們可以取消勾選后,點擊Finish。上面的一個選項是啟動Git Bash,這是Git的命令行工具,我們暫時不需要從這個地方打開。
在這里插入圖片描述

3.3 驗證安裝是否成功

驗證的方式有兩種,一種是我們直接打開我們的Visual Studio Code,點擊左邊第三個后,如果出現的是不是讓你安裝Git便是成功,比如我這里已經打開了項目,所以這里提示我讓我Initialize Repository(初始化倉庫)。
在這里插入圖片描述
當然如果你的Visual Studio Code是啟動的過程中安裝的Git,你可能需要關閉Visual Studio Code再打開一遍才可能會識別到安裝的Git。

第二種方法是我們在桌面上右擊,然后如果點擊后沒出現以下的界面,則還需要點擊顯示更多選項,然后就應該會出現下面的界面,然后這里便有Open Git GUI here和Open Git Bash here這兩個選項,就說明我們的安裝成功了。
在這里插入圖片描述

4. 配置Git

配置Git的方法有很多,這里主要是為了后續上傳我們前面說的代碼存檔,需要進行一個小小的設置。官方教程中也推薦你進行這一步的設置,也就是設置Git用戶名和電子郵件地址。
Git官方文檔/書籍
這里的電子郵箱地址建議先去GitHub官網上注冊一個賬號,然后這里的電子郵箱就是GitHub上注冊賬號的郵箱,這樣的話會方便我們前面說的團隊合作場景中,大家互相方便溝通。
GitHub官網
注:GitHub也需要科學上網才能流程使用。
我們在桌面上右擊后,點擊顯示更多選項,再點擊Open Git Bash here,就會出現Git的命令行工具。
如下圖所示。
在這里插入圖片描述
我們需要輸入的命令格式如下。

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

其中的John Doe可以改為自己的用戶名,郵箱也可以改為自己的郵箱。
在這里插入圖片描述
提示:在這里想粘貼需要右擊后點擊Paste,或者我們右擊后看到這里的Paste快捷鍵,并不是傳統的ctrl+v
至此我們就完成了Git的配置。

5. Git基礎使用

Git使用的方式主要是兩種,一種是通過Git Bash輸入命令進行使用,一種是我們使用Visual Studio Code自動使用Git。

5.1 通過Git Bash使用

5.1.1 創建一個新的倉庫。

第一步我們需要創建一個新的倉庫(Repository),為什么需要一個倉庫呢?我們玩游戲的時候開始新的游戲就會創建一個新的存檔,就像我們玩游戲新游戲也是會讓你選擇一個存檔位置一樣,我們的一個項目開始也就會有一個存放存檔的倉庫,一個游戲我們可以有多個存檔,可能是多個人游玩導致的,因此這些存檔有不同的存檔位置,因此就是不同的倉庫。
一般來說一個項目是最大的,其下面可能會有多個倉庫,每個倉庫之中會有多個存檔。

5.1.1.1 克隆別人的倉庫

當然我們有的時候可以下載網上的存檔直接進行游戲,我們也可以直接拿別人的倉庫過來直接開始項目,這種操作叫做克隆(clone)。
我們在本地選擇好要存儲的地方,然后右擊后選擇顯示更多選項,然后點擊Open Git Bash here。
在這里插入圖片描述
然后我們去GitHub上選擇一個項目點擊Code,然后選擇下面的復制地址。
在這里插入圖片描述
在Git Bash里輸入命令。

git clone (加上剛剛的地址)

這里復制和前面說的一樣建議直接右擊Paste,因為默認快捷鍵不是ctrl+v。
再按下回車后,Git就會把對應的倉庫直接全部下載下來。
在這里插入圖片描述
在這里插入圖片描述

5.1.1.2 自己創建一個本地倉庫

我們還是要打開對應的我們想創建倉庫的文件夾,然后右擊后選擇顯示更多選項,然后點擊Open Git Bash here。
在這里插入圖片描述
然后輸入命令。

git init

再按下回車。
在這里插入圖片描述
我們的文件夾里便會有一個.git文件夾,這個便是我們的代碼倉庫了,這里面的東西千萬不要動。
在這里插入圖片描述
如果你無法看見這個文件夾,可能是你沒有開啟顯示隱藏文件夾,點擊上面的查看,然后點擊顯示,勾上隱藏的項目即可。
在這里插入圖片描述

5.1.2 管理存檔

我們現在有了存檔之后,我們開始書寫我們的代碼,我今天寫了個1.txt進去,現在我想保存以下我目前的進度。
在這里插入圖片描述
這里雖然1.txt在這個文件夾,但其實還沒有放進倉庫之中,因此我們現在需要在Git中提交我們這個存檔到倉庫之中。
在這里插入圖片描述
我們打開這里的Git Bash,輸入以下命令。

git add 1.txt

在這里插入圖片描述
但這一步只是暫時將這個文件放到暫存區,可以理解成存檔放進倉庫需要先拿一個盒子將存檔裝起來,再放到倉庫里。
當然如果這里有很多個文件的話,你也可以輸入以下命令,會將所有文件放入暫存區。

git add .

注意這里.和add之間有空格。
在這里插入圖片描述
我們現在存檔已經打包好,我們需要將這個存檔上交到倉庫去了,執行下面命令。

git commit -m "(備注內容)"

在這里插入圖片描述
這樣代碼就被我們成功添加到了倉庫之中。
我們現在就會有保存好的存檔在倉庫之中,我們可以輸入以下代碼去檢查這些存檔。

git log

在這里插入圖片描述

這里就能發現上面不僅有提交的記錄,記錄上還會有時間提交人等信息,幫助我們溯源,如果這份代碼有問題,我們就可以找到對應負責的人。

我們還可以輸入以下命令,檢查每次提交修改了哪些文件。

git log --stat

在這里插入圖片描述
我們發現每次存檔還會有一個存檔ID,也就是黃色字的那一行,我們可以使用這個ID去查看每次存檔提交與之前的存檔有哪些地方不同。
輸入以下命令。

git diff (commit ID)

這里可能的結果比較抽象,但是如果我們使用下一種方法使用Git就可以清楚的看到代碼前后的差異。

那么如何讀取之前的存檔,讓我們的代碼回到之前的保存節點呢?我們可以輸入以下的兩行命令中的任意一個。

git reset --hard [commit ID]
git checkout [commit ID]

這兩行代碼的區別在于是否會影響暫存區或當前分支的HEAD,上面會將工作目錄和暫存區(staged area)也更新到該提交的狀態,而下面的不會影響。

我們前面提到了很多分支一詞,我們在前面創建完倉庫后,我們現在每一行命令都會有一個括號(main),其實表示的就是我們現在的所有操作都在main這一個分支下,分支是什么呢?
我們前面說過,我們可能有多個人開發的代碼,這些代碼之間互相可能會有沖突或者問題,所以這些當然不能是直接放到原來的代碼之中的,我們之前安裝的時候選擇了默認的分支名,因為修改成了main所以現在創建完倉庫后,Git會幫我們創建這個默認分支main,當我們如果發現某一分支沒有問題的時候,我們可以再將這個分支合并到main中,我們以后會詳細演示這個過程。
相關的命令如下。

git branch new-feature
git checkout branch-name
git checkout -b new-branch
git merge branch-name
git branch -d branch-name
git branch

1.創建分支:
你可以從當前分支(通常是 main 或 master)創建一個新的分支。例如,使用 git branch new-feature 命令創建一個名為 new-feature 的新分支。
2.切換分支:
使用 git checkout branch-name 命令可以切換到指定的分支。如果分支不存在,這個命令會失敗。
3.創建并切換分支:
git checkout -b new-branch 命令會創建一個新的分支,并立即切換到這個新分支。
4.合并分支:
當你在分支上完成開發后,可以使用 git merge branch-name 命令將該分支的更改合并到當前分支。
5.刪除分支:
使用 git branch -d branch-name 命令可以刪除一個已經合并到其他分支的分支。如果分支還沒有合并,可以使用 -D 選項強制刪除:git branch -D branch-name。
6.分支管理:
git branch 命令可以列出所有的分支,其中當前分支會用星號 * 標記。

5.2 通過Visual Studio Code使用

我們在IDE中完成對應的代碼操作后,我們點擊左邊的第三個Source controls,點擊后由于我們這里沒有創建對應的倉庫,所以這里的第一步當然是創建倉庫。
在這里插入圖片描述
我們直接點擊Initialize Repository創建倉庫,點擊后界面就會變成這樣。
在這里插入圖片描述

和前面一樣我們現在需要將代碼進行一個存檔的保存并提交。與前面不同的是這里它直接出現的是Commit也就是提交到倉庫之中,沒有前一步添加到暫存區的操作。然后這里的commit上面我們也可以輸入對應的備注信息在文本框中。
注意我們提交之前之前記得要保存一下文件,可以使用ctrl+s快速保存,在Visual Studio Code中,如果你的文件沒有保存,其右邊會出現一個小圓點,比如前兩張圖的1.txt右邊有個小圓點,而下面的圖沒有,代表這個文件已經被我保存了。
那這個旁邊的U是什么意思呢?這表示該文件是unstaged的,即它已經被修改但還沒有被添加到暫存區。但沒有關系我們這里直接點擊commit。

在這里插入圖片描述
這里也會出現一個彈窗提示我們沒有將存檔先添加到暫存區中。
在這里插入圖片描述
我們這里直接點擊Always就好,這樣它就會默認直接將東西幫我們放進暫存區然后再提交了。
在這里插入圖片描述
然后我們的左下的這個Graph就會顯示我們有多少次提交,以及這些提交之間的關系。

比如我們現在再次修改這個代碼,我們右邊的這個圖標又會出現一個1的下標,提示我們有一個未提交到倉庫的文件。
在這里插入圖片描述
我們這邊再次提交后,Graph下面就會出現新的提交記錄。

在這里插入圖片描述
然后這個記錄和原來的記錄有一個線連起來,表示它是從原來的那個存檔上演變過來的,我們點擊后,右邊會出現一個類似編輯器的界面,但是這里不能修改(只讀),這里顯示的綠色部分就是我們新添加的內容,也就是這兩個存檔之間的不同的地方,就這樣被清晰的展示出來了。
在這里插入圖片描述
這個地方展示了一個新的存檔,這個存檔對原來的存檔進行了刪除,紅色部分展示了刪除了哪些內容,然后綠色部分是其新添加的內容,也就是前面Git Bash里的diff命令的結果的一個可視化展現。
當我們點擊左下角main的時候就可以對分支進行編輯了。
在這里插入圖片描述
點擊后上面的搜索框會出現對應的選項,然后我們點擊Create new branch。
在這里插入圖片描述
比如這里我創建了一個新的Test分支,然后我進行了代碼修改,現在打算將這兩個分支進行合并。
我們按住Ctrl+Shift+P打開命令面板,再輸入Git: Merge Branch命令,然后選擇要合并的分支如下。
在這里插入圖片描述
點擊后,分支就完成了合并。左下的Graph上面的圖標顯示出main和Test分支完成了合并。
在這里插入圖片描述

6. Git完成遠程提交

6.1 Git Bash版本

我們先打開GitHub官網,然后點擊自己的頭像然后點擊Settings。
在這里插入圖片描述
然后點擊左邊的SSH and GPG keys,這里我已經添加過一個。
在這里插入圖片描述
我們這里點擊右上角的New SSH key
在這里插入圖片描述
接下來就會進入這個界面。
在這里插入圖片描述
現在我們就要生成SSH key了。
我們打開命令行,輸入以下命令。

ssh-keygen -t rsa -b 4096 -C "你的注冊郵箱"

按下回車后再按下三次回車就好。然后我們就會出現下面的界面,代表SSH keys生成完畢。
在這里插入圖片描述
命令行的這個地方提示了SSH keys生成的地方,打開對應文件夾可以找到SSH keys。
在這里插入圖片描述
打開對應文件夾后,用記事本打開這個.pub結尾的文件。
在這里插入圖片描述
打開后復制里面的內容,然后回到之前的添加SSH Key界面,上面的Title隨便輸入一個名字就好。
然后下面的Key欄粘貼我們剛剛復制的生成的SSH key。
在這里插入圖片描述
完成后點擊下面的Add SSH key,然后會讓你再輸入一遍賬號的密碼進行確認,之后就完成了添加。
現在我們可以檢查以下是否能成功建立連接,這一步同樣需要科學上網。
我們輸入以下命令。

ssh -T git@github.com

回車后對于下一個詢問輸入yes再回車即可。
在這里插入圖片描述
出現Hi的那一行就說明SSH連接建立完畢。

現在我們先創建一個遠程倉庫,這個遠程倉庫,就相當于我們前面說的大家一起使用的網盤,本地的倉庫只是在自己電腦上,別人難以訪問,現在放到GitHub上之后,它就是一個網上的資源,當然你也可以設置哪些人可以訪問。
我們打開GitHub頁面,然后選擇這里的加號,然后點擊New repository。當然也可以在別的界面創建倉庫,比如左邊的側欄,或者是個人倉庫界面都可以創建一個新的倉庫。
在這里插入圖片描述
點擊后,我們輸入這個倉庫的名字,下面Description一欄中可以輸入這個倉庫的描述,下面的Add a README file,也建議勾選。
在這里插入圖片描述
其余選項不動后,然后點擊右下角的Create repository就完成了倉庫的創建。
完成創建后就只會有一個孤零零的README文件展示了這個項目是做什么的。
在這里插入圖片描述
我們其實可以直接點擊Add file添加文件,但是只能上傳單一的文件,無法直接上傳文件夾,而且本教程就是想教大家如何使用Git進行上傳。我們這里點擊Code,然后選擇SSH,然后復制對應的SSH地址。
在這里插入圖片描述
我們回到要上傳的文件夾下,我們向前面的步驟一樣開始操作。
在這里插入圖片描述
當我們完成本地倉庫的提交后,我們下一步就是將這個存檔提交到遠程倉庫之中去。
我們輸入以下指令。

git remote add origin (遠程倉庫的SSH地址)

在這里插入圖片描述
我們輸入以下指令會發現報錯。

git push -u origin main

在這里插入圖片描述
該指令是說我們將本地的main分支推送到遠程倉庫origin中,但是現在遠程倉庫有README文件,我們本地沒有,這就是我們前面說的發生了沖突,我們為了解決這個問題,我們需要先拉取遠程倉庫的更改,以確保我的本地倉庫是最新的。
我們輸入命令。

git pull origin main

在這里插入圖片描述
我們發現這里繼續報錯,因為這里我們都是main分支,這里引起了沖突。
由于我們這里是不同的文件,我們現在要求它們強制合并其實也不會有什么問題,因此我們可以使用下面的命令。

git pull origin main --allow-unrelated-histories

在這里插入圖片描述
這里我們可以發現文件夾下多了原來的README文件,因為這里我們進行了強制合并。

我們再輸入遠程提交命令。

git push -u origin main

在這里插入圖片描述
這里提示已經成功,我們再去GitHub上查看一下。
也成功完成上傳。
在這里插入圖片描述
這其實告訴我們正確的代碼順序,其實是先創建遠程倉庫,然后我們將倉庫和我們的本地倉庫進行同步(pull),然后我們進行代碼書寫,然后完成修改后,再提交到遠程倉庫,這才是正確的遠程倉庫使用順序。

6.2 Visual Studio Code版本

Visual Studio Code版本的操作如下。
我們回到剛剛的Souce Control界面,然后點擊這里的Publish Branch。
在這里插入圖片描述
這里會彈出一個彈窗,這個彈窗會讓你去登錄GitHub。
在這里插入圖片描述
這里確定是自己的賬號后點擊Continue即可。
在這里插入圖片描述
然后后面會有一個正式的權限授權,繼續點擊Authorize Visual-Studio-Code即可。允許后面的彈窗。
回到Visual Studio Code后,這里會問你要上傳到私人倉庫,還是公開倉庫,這就看你的具體項目情況了。
在這里插入圖片描述
我這里選擇上傳到公共倉庫,等待一會后,它就會上傳完畢,當然這里需要科學上網。
在這里插入圖片描述
成功后左邊的Graph里的這個分支的右邊會多一個云的標志,表示你的這個分支已經上傳到GitHub上了。
我們打開GitHub上能看到成功上傳。

在這里插入圖片描述
當我們現在本地又有新的存檔提交到倉庫之中時,我們的這里云端就會落后與本地的倉庫,這里的Graph也會出現左邊的這種情況,我們這時候再點擊左邊的Sync Changes就能完成前面的Pull和Push的操作。
在這里插入圖片描述
同樣這里會提示你,這里可以選擇OK,Don’t Show Again即可。
在這里插入圖片描述
等待上傳完畢,現在云端和本地又實現同步了。
在這里插入圖片描述
這就是全部Git和GitHub的基礎教學教程,一些其他復雜的實際使用這里沒有詳細說明,希望大家能學會Git的基礎使用,能在GitHub上找到優秀的開源項目幫助到自己,在未來和別人的多人項目中做出自己的貢獻。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71942.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL中like模糊查詢如何優化?

大家好,我是鋒哥。今天分享關于【MySQL中like模糊查詢如何優化?】面試題。希望對大家有幫助; MySQL中like模糊查詢如何優化? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 在 MySQL 中,LIKE 模糊查詢雖然非常常見,…

?LeetCode(數學分類) 2. 兩數相加——暴力與優化?

?LeetCode(數學分類) 2. 兩數相加——暴力與優化? 提示&#xff1a; 每個鏈表中的節點數在范圍 [1, 100] 內 0 < Node.val < 9 題目數據保證列表表示的數字不含前導零 題解&#xff1a; 暴力與優化&#xff0c;暴力即轉換為十進制解題&#xff0c;優化即直接在鏈表上進…

①Modbus TCP轉Modbus RTU/ASCII網關同步采集無需編程高速輕松組網

Modbus TCP轉Modbus RTU/ASCII網關同步采集無需編程高速輕松組網https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信單元 MODBUS TCP 轉 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作為MODBUS TCP通信的服務器進行動作。可通…

基于PyTorch的深度學習——機器學習3

激活函數在神經網絡中作用有很多&#xff0c;主要作用是給神經網絡提供非線性建模能力。如果沒有激活函數&#xff0c;那么再多層的神經網絡也只能處理線性可分問題。 在搭建神經網絡時&#xff0c;如何選擇激活函數&#xff1f;如果搭建的神經網絡層數不多&#xff0c;選擇si…

力扣:找到一個數字的 K 美麗值(C++)

一個整數 num 的 k 美麗值定義為 num 中符合以下條件的 子字符串 數目&#xff1a; 子字符串長度為 k 。子字符串能整除 num 。 給你整數 num 和 k &#xff0c;請你返回 num 的 k 美麗值。 注意&#xff1a; 允許有 前綴 0 。0 不能整除任何值。 一個 子字符串 是一個字符串里…

C/C++藍橋杯算法真題打卡(Day3)

一、P8598 [藍橋杯 2013 省 AB] 錯誤票據 - 洛谷 算法代碼&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 讀取數據行數unordered_map<int, int> idCount; // 用于統計每個ID出現的次數vector<int> ids; …

<建模軟件安裝教程1>Blender4.2系列

Blender4.2安裝教程 0注意&#xff1a;Windows環境下安裝 第一步&#xff0c;百度網盤提取安裝包。百度網盤鏈接&#xff1a;通過網盤分享的文件&#xff1a;blender.zip 鏈接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取碼: 0309 --來自百度網盤超級會員v3的分…

C語言八股---預處理,編譯,匯編與鏈接篇

前言 從多個.c文件到達一個可執行文件的四步: ??預處理–>編譯–>匯編–>鏈接 預處理 預處理過程就是預處理器處理這些預處理指令(要不然編譯器完全不認識),最終會生成 main.i的文件 主要做的事情有如下幾點: 展開頭文件展開宏條件編譯刪除注釋添加行號等信息保留…

用Deepseek寫一個 HTML 和 JavaScript 實現一個簡單的飛機游戲

大家好&#xff01;今天我將分享如何使用 HTML 和 JavaScript 編寫一個簡單的飛機游戲。這個游戲的核心功能包括&#xff1a;控制飛機移動、發射子彈、敵機生成、碰撞檢測和得分統計。代碼簡潔易懂&#xff0c;適合初學者學習和實踐。 游戲功能概述 玩家控制&#xff1a;使用鍵…

面向高質量視頻生成的擴散模型方法-算法、架構與實現【附核心代碼】

目錄 算法原理 架構 代碼示例 算法原理 正向擴散過程&#xff1a;從真實的視頻數據開始&#xff0c;逐步向其中添加噪聲&#xff0c;隨著時間步 t 的增加&#xff0c;噪聲添加得越來越多&#xff0c;最終將原始視頻數據變成純噪聲。數學上&#xff0c;t 時刻的視頻數據與 t…

水下機器人推進器PID參數整定與MATLAB仿真

水下機器人推進器PID參數整定與MATLAB仿真 1. PID控制原理 目標:通過調節比例(P)、積分(I)、微分(D)參數,使推進器輸出力快速穩定跟蹤期望值。傳遞函數(示例):推進器動力學模型可簡化為: [ G(s) = \frac{K}{\tau s + 1} \cdot e^{-Ts} ] 其中:K為增益,τ為時間常…

游戲引擎學習第149天

今日回顧與計劃 在今天的直播中&#xff0c;我們將繼續進行游戲的開發工作&#xff0c;目標是完成資產文件&#xff08;pack file&#xff09;的測試版本。目前&#xff0c;游戲的資源&#xff08;如位圖和聲音文件&#xff09;是直接從磁盤加載的&#xff0c;而我們正在將其轉…

Java函數式接口四部曲之Consumer

Consumer 是一個函數式接口&#xff0c;位于 java.util.function 包中。它表示一個接受單個輸入參數并且不返回任何結果的操作。Consumer 通常用于需要對輸入參數執行某些操作但不產生返回值的場景。 Consumer 接口定義了一個抽象方法&#xff1a;accept(T t)&#xff1a;接受…

ForceMimic:以力為中心的模仿學習,采用力運動捕捉系統進行接觸豐富的操作

25年3月來自上海交大盧策吾教授團隊的論文“ForceMimic: Force-Centric Imitation Learning with Force-Motion Capture System for Contact-Rich Manipulation”。 在大多數接觸豐富的操作任務中&#xff0c;人類會將隨時間變化的力施加到目標物體上&#xff0c;以補償視覺引…

【愚公系列】《Python網絡爬蟲從入門到精通》045-Charles的SSL證書的安裝

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯&#xff0c;華為云云享專家&#xff0c;華為開發者專家&#xff0c;華為產品云測專家&#xff0c;CSDN博客專家&#xff0c;CSDN商業化專家&#xff0c;阿里云專家博主&#xff0c;阿里云簽約作者&#xff0c;騰訊云優秀博主&…

vulnhub靶場【digitalworld.local系列】的electrical靶機

前言 靶機&#xff1a;digitalworld.local-electrical&#xff0c;IP地址為192.168.10.12&#xff0c;后期因為卡頓&#xff0c;重新安裝&#xff0c;ip地址后面為192.168.10.11 攻擊&#xff1a;kali&#xff0c;IP地址為192.168.10.6 kali采用VMware虛擬機&#xff0c;靶機…

macos 程序 運行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件

多視圖幾何--結構恢復--三角測量

三角測量 1. 核心公式推導 假設兩個相機的投影矩陣為 P P P 和 P ′ P P′&#xff0c;對應的匹配圖像點(同名點)為 ( u , v ) (u, v) (u,v) 和 ( u ′ , v ′ ) (u, v) (u′,v′)&#xff0c;目標是求解三維點 X [ X x , X y , X z , 1 ] T X [X_x, X_y, X_z, 1]^T X…

共享內存的原理和創建

目錄 共享內存的原理 共享內存的創建 代碼實現創建 共享內存的管理指令 我們今天來學習共享內存&#xff01;&#xff01;&#xff01; 共享內存的原理 兩個進程同時使用內存中開辟的共享空間進行通信就是建立并使用共享內存進行進程間的通信。System V 共享內存&#xf…

3.10[A]cv

核心模塊&#xff1a; rasterizer&#xff1a;光柵化器&#xff0c;負責三角形遍歷和像素繪制Shader&#xff1a;包含頂點著色器和多種片元著色器Texture&#xff1a;紋理處理模塊 頂點著色器的計算量一般遠小于片元著色器。因為組成三角形的頂點相對有限&#xff0c;而片元需…