日韩性视频-久久久蜜桃-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 基础 —— 安装 配置 别名 对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 九九在线视频 | 久久久久久久久久久久久女过产乱 | 欧美三级在线播放 | 天天综合日日夜夜 | 国模小黎自慰gogo人体 | 农村寡妇一区二区三区 | 青青草原伊人网 | 一本一道久久a久久综合蜜桃 | 欧美亚洲 | 波多野42部无码喷潮在线 | 动漫美女无遮挡免费 | a午夜| 欧洲亚洲天堂 | 国产成人无码精品久久久性色 | 无码成人一区二区 | 成人无码久久久久毛片 | 日韩欧美精品中文字幕 | 欧美久久久久久久久久久久 | 在线观看免费高清在线观看 | 观看av免费 | 国产精品腿扒开做爽爽爽挤奶网站 | 亚洲婷婷一区 | 久久久伊人网 | 精品无码一区二区三区在线 | 深夜在线 | 久久久夜色精品 | 青草视频在线观看视频 | 久久黄色av| 日本网站免费观看 | 激情图片在线视频 | 人人做| 国产美女福利视频 | 亚洲精品高清在线观看 | 中文字幕精品一区久久久久 | 黑人vs亚洲人在线播放 | 少妇太紧太爽又黄又硬又爽小说 | 性激烈视频在线观看 | 欧美日韩精品一区二区在线播放 | 丝袜熟女一区二区 | 男人猛吃奶女人爽视频 | 人人做| 欧美色xxxxx| 官场艳妇疯狂性关系 | 风韵少妇性饥渴推油按摩视频 | 欧美浪妇xxxx高跟鞋交 | 亚洲综合影视 | 成品人视频ww入口 | 国产一区二区精品久久 | 国产又粗又猛又爽又黄91 | 久久七 | 中文字幕乱码一区 | 亚洲天天综合 | 黄色激情毛片 | 初音未来打屁股 | 国产精品日韩专区 | 综合色亚洲 | 黄色免费网站在线观看 | 日本精品免费一区二区三区 | 四虎影院永久 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 亚洲a成人 | 天天爽av| 高清视频在线免费观看 | 侵犯女教师一区二区三区 | 日本aⅴ在线观看 | 日本三级韩国三级三级a级中文 | 18日本xxxxxxxxx95| 亚洲AV第二区国产精品 | 一级看片免费视频 | 国产白浆一区二区 | 青青草国产一区二区三区 | 国产激情av在线 | 鲁丝片一区二区三区 | 欧美在线一区视频 | 欧美在线色图 | 欧洲色区| 一级作爱视频 | 福利视频在线播放 | 韩日视频在线观看 | 亚洲天堂2020| 中文字幕一二三四 | 国产精品丝袜黑色高跟 | 欧美精品一区二区三区久久久 | 滋润少妇h高h| 修仙淫交(高h)h文 | 国产大片在线观看 | av88av | 亚洲伊人天堂 | 男人操女人的视频 | 日本一区二区三区免费视频 | 国产suv精品一区二区68 | 国产一区二区麻豆 | 日本在线视频不卡 | 九九九热| 亚洲aa视频 | www香蕉| 亚洲欧美激情在线 | 久久不卡影院 | 无码人妻丰满熟妇区bbbbxxxx |