日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git 基础 —— 安装 配置 别名 对象

發布時間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git 基础 —— 安装 配置 别名 对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Git 基礎學習系列

  • Git 基礎 —— 安裝 配置 別名 對象
  • Git 基礎 —— 常用命令
  • Git 基礎 —— 常見使用場景
  • Git基礎 —— Github 的使用

Git 安裝

Git下載地址

Windows 安裝時需要注意在Configuring the line ending conversions界面,選擇Checkout as-is,commit as -s,避免Windows的換行符問題。如果忘記設置,可以使用如下命令后期設置:

git config --global core.autocrlf false

參考:

  • GitHub 第一坑:換行符自動轉換

Git 配置

可以通過 查看配置:

  • git config -l/--list
  • git config --list [--local | --global | --system]

說明:

  • system 不常用
  • local 需要在一個 Git 倉庫下使用,它的配置,優先級是最高的,代表僅針對單倉庫的配置

設置 Git 賬號

配置 user 信息

git config --global user.name "michael728" git config --global user.email "649168982@qq.com"
  • --local:區域為本倉庫
  • --global: 當前用戶的所有倉庫
  • --system: 本系統的所有用戶

運行 git config --help 可以看到幫助文檔,比如,配置錯誤了,可以刪除:git config --unset usr.name 將 usr.name 刪除,應該是 user.name。

生成 SSH Key

1.先查看有沒有 SSH Key,ls -al ~/.ssh,如果沒有,采用如下方法生成。
2.生成 ssh 公鑰,不要重命名生成的文件,否則會導致 ssh 方式下載 Git 代碼庫失敗:

ssh-keygen -t rsa -C "649168982@qq.com"

參數說明:

  • -t 用來指定加密算法為 rsa;
  • -C 后面是個注釋信息,并不一定要和你 Git 賬戶的郵箱或者 Git 賬戶名保持一致,只是常常是和你賬戶郵箱保持一致,這樣設置,就能知道這個公鑰被綁定在哪個 Git 賬戶上了。

3.生成公鑰之后,拷貝公鑰的內容,粘貼到你 Github 賬戶的 SSH Key 設置中;

pbcopy < ~/.ssh/id_rsa.pub

如果沒有 pbcopy 命令,就直接打開 id_rsa.pub 內容,復制即可;

關于公鑰私鑰的一些探究:

  • 一個 ssh key 只能綁定在一個 Git 賬戶上,而一個 Git 賬戶可以綁定多個 ssh key;
  • 公鑰就相當于一個 fingerprint ,公鑰和唯一一個 Git 賬戶綁定,那么凡是機器上有這個公鑰對應的私鑰,機器就有綁定賬戶的權限去操作相關的代碼庫,即在 A 機器上生成的私鑰發送到 B 機器上,那么,B 機器也會有權限下載了;

參考:

  • Github Add SSH Key 文檔
  • 簡書-圖解SSH原理
  • 簡書-SSH key的介紹與在Git中的使用
  • archlinux-SSH keys (簡體中文)

Git 配置別名

git config命令可以輕松為每一個命令設置別名。例如:

git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit git config --global alias.st status

演示將git visual定義為 gitk 的別名:

git config --global alias.visual '!gitk'

設置命令的別名,可以提高操作效率。查看.gitconfig文件vim ~/.gitconfig:

[user]name = xxxemail = xxx [i18n]commitencoding = utf-8logoutputencoding = utf-8 [core]quotepath = false [filter "lfs"]clean = git-lfs clean -- %fsmudge = git-lfs smudge -- %fprocess = git-lfs filter-processrequired = true [alias]co = checkoutbr = branchc = commits = statusunstage = reset HEAD --last = log -1 HEADlg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative[color]ui = true

我們可以體驗一個 log 的別名命令設置:

lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

這是超厲害的別名縮寫命令,試試現在的 git lg 有多酷炫吧!

探秘 .git 目錄

.git 裸倉庫文件夾,反映了 Git 良好的文件存儲機制。

  • HEAD 文件,指向當前所在的分支,表示一個「引用」。例如當前在 develop 分支,HEAD 內容就是 ref: refs/heads/develop
  • config 文件,是本地倉庫的配置文件,git config --local --list
  • refs 文件夾,包含了 heads 和 tags 文件夾。heads 歸檔的分支,tags 歸檔的標簽,也叫做「里程碑」。
    • heads 文件夾下有多個文件,每個文件和倉庫本地存在的分支名一致,文件內容是 commit id。文件當中存放的其實是這個分支的指針指向的 commit id。git branch -av 可以看到分支信息和 commit id。它是個 commit 類型的對象。
    • tags 中也有多個文件,文件名和存在 tag 名一致,內容也是 commit id。它也是個 commit 類型的對象。
  • objects 文件夾(核心),存放所有的 git 對象,對象哈希值前 2 位作為文件夾名稱,后 38 位作為對象文件名, 可通過 git cat-file -p <2位+38位> 命令查看文件內容。git cat-file -t <2位+38位> 查看對象類型,這是一個 tree 類型的對象。內容本身是一個 blob 對象。任何文件的內容相同,在 Git 眼里,它就是唯一的一個 blob 對象。

還有一些暫可以不了解的文件:

  • COMMIT_EDITMSG 文件
  • ORIG_HEAD 文件,好像是上一次的 commit id
  • description 文件,倉庫的描述信息文件
  • index 文件
  • hooks 文件夾
  • info 文件夾
  • logs 文件夾

知道了一個 sha1 值,如何查看它的對象類型、對象內容、對象大小?

  • git cat-file -t 命令 , 查看 git 對象的類型
  • git cat-file -p 命令, 查看 git 對象的內容
  • git cat-file -s 命令, 查看 git 對象的大小

Git 對象彼此關系

commit tree blob 三個對象之間的關系:

一次 commit id 對應一棵樹(tree),一次快照,整個項目的快照,包含了哪些文件夾(tree)、哪些文件(blob)。blob 可以看做是一個文件,但是和文件名是沒關系的,不管文件名是什么,只要文件內容相同,就是一個 blob,這種設計大大節約了存儲空間。

實驗

新建一個 git 倉庫,創建一個 doc 文件夾,在 doc 文件夾中創建 readme 文件

  • 在單純創建 doc 文件夾時, git 不會理會;
  • 創建 readme 文件之后,會提示有文件可以添加跟蹤;
  • 這時候執行 find .git/objects --type f, 沒有發現有對象生成;
  • 接著執行 git add doc 將文件添加到暫存區,這時候有文件對象生成了:
$ find .git/objects -type f .git/objects/27/e826dc62c8a3616e7c15d45a3d77cd8e7966c0 $ git cat-file -t 27e8 blob
  • 接著創建 commit,git commit -m "add readme",這時候文件對象內容:
.git/objects/27/e826dc62c8a3616e7c15d45a3d77cd8e7966c0 .git/objects/87/0af27bedac0cf42d9a7637709e455fa7de7a7e .git/objects/a0/3d66adf115035c521bc08509f54d867590a458 .git/objects/e6/b633ca37bf3532f87e833c8f765e07ea50cfe8

1 個 commit 對象,2 個 tree 對象,1 個 blob 對象。

為何會有2個 tree 對象呢,其中,整個工作目錄是一個 tree 對象,工作目錄下的 doc 文件夾對應了一個 tree 對象。

擴充:我又將之前 doc 文件夾的 readme 文件復制在倉庫的根目錄下,此時在 git add readme 之后,文件對象仍然無變化;但是,當 commit 之后,文件對象變多了,多了 1 個 commit,1個 tree 對象。這個多出來的 tree 對象,就是因為工作目錄變化了,那么就多出來了一個 tree 對象。

HEAD 與 branch

分離頭指針

$ git checkout 20824e0 Note: checking out '20824e0'.You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

detached HEAD就表示你當前處于「分離頭指針」的狀態。,其實,「分離頭指針」就是表示正工作在一個沒有分支的情況下,沒有與分支進行掛鉤, HEAD 沒有指向任何分支。 處于「分離頭指針」狀態進行提交后,當你切換到其他分支,例如 git checkout master ,之前產生的 commit 可能會被 Git 當為垃圾清除掉。

分離頭指針的應用場景

在處于分支頭指針狀態時,你產生了一次 commit 0635f24,當你切換到其他分支后,有可能就找不到剛剛的提交了,你用 gitk --all 之后,看不到剛剛的提交的。

如果想保存剛剛的提交,需要使用如下命令將其與分支掛鉤:

git branch <new-branch-name> 0635f24

如果臨時想基于某個 commit 做變更,試試新方案是否可行,就可以采用分離頭指針的方式。測試后發現新方案不成熟,直接 reset 回其他分支即可,省卻了建、刪分支的麻煩。

進一步理解 HEAD 和 branch

HEAD 既可以指向當前分支的最新 commit,也可以指向歷史中的某一次 commit (「分離頭指針」的情況)。歸根結底,HEAD 指向的就是一次 commit。

當我們做分支切換時,HEAD 會跟著切換。

例如比較最近兩次提交的差異,可以用命令:

# 下面三個命令等效 git diff xxx1 xxx2 git diff HEAD HEAD^ Git diff HEAD HEAD~1
  • HEAD^1 表示 HEAD 的父親,HEAD^^ 表示 HEAD 父親的父親。
  • HEAD^^ 和 HEAD~2等效。

Git 小技巧

Git 幫助文檔

授人以魚不如授人以漁,先知道怎么通過幫助文檔查看常用命令的說明吧:

git help git help <cmd> # 與 git <cmd> --help 等價 git help <cmd> --web # 使用瀏覽器頁面打開 git <cmd> -h # 顯示簡略的命令幫助

gitk 圖形界面

gitk 后面可以跟上文件的路徑, 這樣能看單個文件的修改歷史的具體內容。

  • Patch 表示的是「變更集」,某一次 commit 修改的文件集合;
  • Author 作者
  • Commiter 提交人
  • Cherry 挑選一個 commit,放到另一個分支上,這時候,Author 和 Commiter 就有可能不是一個人了,因為你挑選的那個 commit 作者可能是 A,你 cherry pick 過來之后提交,提交人是你,但是作者信息還是 A,版權考慮。
  • Parent 上一次的 commit id
  • Child 下一次的 commit id
  • 菜單 View ,選擇 All refs 可以看到所有的分支演變圖

gitignore 指定不需要 Git 管理的文件

.gitignore 指定哪些文件不需要納入版本管理的。

  • *.d 任何 .d 結尾的文件都不需要;
  • *.dSYN/ 任何以 .dSYM 結尾的文件夾下的文件都不要;

加不加 / 作用是不一樣的,很微妙。比如,有一個文件夾叫 doc,那么,.gitignore 中寫 doc, Git 既會忽略 doc 文件夾,也會忽略 doc 文件!只有 doc/ 這么寫,才會只忽略 doc 文件夾而不忽略 doc 文件,作用才很明確。

所以,如果要忽略的是文件夾,那么就顯示的加上 / 吧。

Github 現在創建倉庫時,可以選擇生成什么 .gitignore ,附上鏈接作為參考:

  • github/gitignore/maven
  • github/gitignore/java

這里有一個帖子討論了為何 .idea 文件夾沒有加入到 .gitignore 中,這是因為每個開發者的編輯器不一樣,大部分習慣是將編輯器產生的文件夾添加到全局的忽略配置中:

# file: ~/.gitignore_global .DS_Store .idea

此外,還要配置指定全局的忽略文件配置在哪兒:

git config --global core.excludesfile/Users/michael/.gitignore_global

或者編輯全局配置文件 ~/.gitconfig:

[core]excludesfile=/Users/michael/.gitignore_global

參考:

  • Git中全局忽略.DS_Store文件

解決沖突的工具

diffmerge是一個可以用來文件對比軟件。相較于 git mergetool 使用的自帶的界面,diffmerge 提供了一個可交互的編輯窗口,大大提高了效率。我們可以通過簡單的配置,在使用 git difftool git mergetool 時,默認使用 diffmerge 工具來進行展示差異。當然,你要是有錢,也可以選擇 Beyond Compare 來作為對比軟件。

選擇 OS X 10.6+ Installer (Intel) 版本,安裝好之后進行配置:

$ git config --global diff.tool diffmerge $ git config --global difftool.diffmerge.cmd "/usr/local/bin/diffmerge \"\$LOCAL\" \"\$REMOTE\""$ git config --global merge.tool diffmerge $ git config --global mergetool.diffmerge.trustExitCode true $ git config --global mergetool.diffmerge.cmd "/usr/local/bin/diffmerge --merge --result=\"\$MERGED\"\"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""

為了避免每次運行git difftool都有提示信息,可以輸入如下命令

$ git config --global difftool.prompt false

為了能夠支持顯示中文,需要對編碼進行設置:

diffmerge 的使用:

  • git difftool [fileName]
  • git mergetool [fileName]

使用 git mergetool 合并分支時,默認會生成以 *.orig 為擴展名的備份文件,每次都要手動刪除。可以修改 Git 配置,禁止產生備份文件:

git config --global mergetool.keepBackup false

參考:

  • 油管-git mergetool explained 對自帶的 git mergetool 命令的使用介紹
  • 油管-Git Tutorial: Diff and Merge Tools
  • diffmerge 下載 選擇 OS X 10.6+ Installer (Intel) 版本
  • diffmerge 幫助文檔
  • 博客園-DiffMerge安裝配置使用 講了如何配置 UTF-8
  • 對于解決 Git 的 Merge Conflict 你有哪些經驗和技巧
  • SOF-How to resolve merge conflicts in Git

轉載于:https://www.cnblogs.com/michael-xiang/p/10465857.html

總結

以上是生活随笔為你收集整理的Git 基础 —— 安装 配置 别名 对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费看91的网站 | 天天射天天干天天色 | 成人免费黄色网 | 亚洲狼人天堂 | 国产情侣91 | 国产精品自拍网站 | 91影院在线 | 一对一色视频聊天a | 成年免费视频 | 国产乱人伦精品一区二区 | 成人av专区 | 男人透女人免费视频 | 亚洲精品国产suv一区 | 欧美在线一二 | 欧美一区综合 | 无码人妻一区二区三区免费 | 日本japanese极品少妇 | 超碰caopeng| 中文在线不卡 | 日本成人免费视频 | 岛国不卡| 欧美人妖另类 | 亚洲午夜精品福利 | 成人精品免费 | 国产乱色 | 特a级黄色片 | 天天干夜夜拍 | 日韩性生交大片免费看 | chinese hd av| 丰满熟女一区二区三区 | 国产精品美女一区二区三区 | 久久九九爱 | 亚洲精品国产精品乱码在线观看 | 中文在线不卡视频 | 黑鬼巨鞭白妞冒白浆 | 欧美在线播放视频 | 神马一区二区三区 | 中国黄色录像一级片 | 熟妇人妻久久中文字幕 | 美女mm131爽爽爽免费动视频 | 嫩草av91 | 亚洲欧洲精品成人久久奇米网 | 韩国一二三区 | 国产三级精品三级在线观看 | 国产精品自拍在线观看 | 97在线免费视频观看 | 一区二区三区四区av | 男人插女人视频网站 | 91精品国产电影 | 美女av在线免费观看 | 日本亲与子乱xxx | 五月网站 | www男人天堂| 黑人巨茎大战欧美白妇 | 日本成人免费视频 | 综合久草 | 亚洲va韩国va欧美va精品 | 五月天婷婷色综合 | 韩国毛片视频 | 国产秋霞| 蜜臀网在线| 91夜色 | 天天操操 | 在线国产不卡 | 国产高潮国产高潮久久久 | 亚洲熟伦熟女新五十路熟妇 | 可以直接看的无码av | 亚洲成色网 | 人与性动交zzzzbbbb | 丝袜高跟av | 日韩美女黄色 | 影音先锋中文字幕在线视频 | 美女调教视频 | 伊人网址 | 四虎影视免费永久大全 | 黄色大片久久 | 亚洲精品在线免费看 | 欧美精品一区二区三区在线播放 | 欧美精品国产精品 | 扒开女人屁股进去 | 欧美精品导航 | 日韩123 | 亚洲精品乱码久久久久99 | 欧美综合自拍 | 男女草比视频 | 夫妻性生活黄色大片 | 亚洲精品久久久久久久久久久久久 | 免费视频黄色 | 国产麻豆精品一区 | 中文字幕久久久久 | 人体裸体bbbbb欣赏 | 狠狠热视频 | 欧美高清性 | 99精品视频在线免费观看 | 少妇激情视频 | 伊人www22综合色 | 激情网络 | 韩国一区二区在线观看 | 先锋av资源网站 |