顯示具有 Tech-programming-git 標籤的文章。 顯示所有文章
顯示具有 Tech-programming-git 標籤的文章。 顯示所有文章

2022年7月7日 星期四

[Git] worktree

 因為公司code base很肥大(?)一個專案17.xGB

但因為不是always在master branch做事或是想要參考(複製/確認)其他branch的一些東西,會需要去checkout不同的branch

這時候worktree就很好用了

[Git] worktree

2021年7月22日 星期四

Git traped?

 I've a file in a Git control project that I've do some local change, and don't want it to be overwrite.

so I use

$ git update-index --skip-worktree <file-list>

to avoid the over write

but strange thing happen today when I'm trying to checkout another branch, Git ask me to commit / stash local change, but when I stash local change

git> No local change to save

but when I checkout

git > please commit your changes or stash them before you switch branches

my Git version is 2.30.2

so I can only 

$ git update-index --no-skip-worktree <file-list>

then 

$ git stash

$ git checkout

Git traped?

2021年3月23日 星期二

[git] 完全回復成未修改狀態

清除未追蹤檔案

 git clean -fx

(x表示連同ignored files)

可以先用 

git clean -fxn

測試

還原git controlled files

git reset --hard

[git] 完全回復成未修改狀態

2019年8月14日 星期三

Git 基本流程與名詞解釋

Git專案中包含三種主要元件
Repository (Repo): Git專案的容器,用來追蹤檔案的改變
Working tree (working directory): 目前正在作用的Git檔案
Index (staging area): area): 比較 repo 跟working tree的檔案,將被修改過的檔案標記為modified

Gitit工作流程
1. 在working tree 中修改檔案
2. 將想在下個Commit中包含的改變Stage
3. Commit. commit 會將index中的檔案快照儲存到repo中

Git檔案的三種主要狀態
Modified: 檔案被改變
Staged: 改變的檔案被加入待commit清單
Committed: 檔案被存入 repo


from: Git workflow @ backlog.com


參考資料

Git 基本流程與名詞解釋

Git reset 回復尚未push的commit

昨天因為sub module還沒commit就先commit整的專案的關係,導致sub module的一個檔案卡住沒有commit出去
但因為潔癖作祟不想因為這樣一個原因新增一個commit(前天也發生過,但那次潔癖沒發作就直接新增一個commit)直覺上我還沒push應該還有救
中間發生了不小心用了revert這個功能又平白多出一個commit的窘況(revert 是在push 出去之後的挽救方法)
今天研究之後發現這種commit錯但還沒push的情況應該是要用reset來救

Git reset 回復尚未push的commit

2019年6月10日 星期一

更新git的檔案by .gitignore

.gitignore可以存在於被版本控管的資料夾
修改.gitignore可以讓特定目錄/檔案類型...的檔案不被git追蹤
(.gitignore 可能需要自己新增)
ex:
*.dll
/[Dd]ebug
但如果已經commit出去,這時候再加入git ignore並不會讓檔案停止被追蹤,而是需要去remove(rm)之後再重新add, gitignore才會發生作用

在專案目錄下開啟 cmd

git rm -r --cached .    #清除暫存
git add .    #重新加入
git ls-files #檢視目前追蹤的檔案
git commit -m "update .gitignore"   #commit更新後的 git ignore
git push . #push

更新git的檔案by .gitignore

2019年5月30日 星期四

在VsCode 使用git

細節網路上都找得到,但有個要注意的點是使用者需要到git source去把資料夾先pull 下來再跟Vs code連結。
Vs 連結的方式是下好Azure Repos插件之後用File>open folder加入pull(有.git資料夾),可能途中會需要輸入一下帳號密碼
完成之後會VS code的左下角status bar會變這樣

在VsCode 使用git

2016年8月8日 星期一

一點點git

今天又去抓git下來用,因為想要修改專案又怕之後會想改回去orz
用的是git-scm 2.9.2
特別筆記一下
因為想用的功能很簡單所以使用bash操作
抓完安裝之後再目標目錄下右鍵 Git Bash here
如此就會開啟git的bash
首先要將資料夾弄成被git 管理的狀態,資料夾底下會新增一個.git資料夾
$git init
然後可以用
$git status
查詢目前資料夾的git狀態
接著可以把全部資料夾底下的檔案加入git追蹤
$git add .
接著可以去除一些compile產生的執行檔
$git rm -r --cached x64
x64是目標目錄,如此x64/Debug/跟x64/Release/裡面的東西都會被移除git控制
但這樣用status查詢會警告剛剛那些資料夾沒有被加入
所以需要在資料夾底下加入一個.gitignore的檔案
$touch .gitignore
(用檔案管理員無法新增沒有檔案名稱得檔案)
$vim .gitignore
編輯
x64
完成後按esc接著:wq結束並儲存
這樣就不會產生警告說這些檔案沒加入了

git的cmd還不錯,可以按tab auto-complete
例如你要輸入
$git branch myBranch
只要輸入
$git br<tab> my<tab>
就ok了!

<日常操作>
加入完成後如果需要將目前的資料儲存為一個版本
$git commit -a -m 'message here'
要切換到新的branch
$git checkout -b myBranch
往後如果只是要切換而沒有要新增
$git checkout myBranch
要看目前有的branch
$git branch
要刪除某個branch(不檢查有無merge過了)
$git branch -D myBranch
會檢查有無merge完
$git branch -d myBranch


$git remote add usbBackup '/g/git/myProject'
但是要先把g:/git/myProject設成git資料夾,方法也很簡單,就第一次直接把全部myProject內的東西copy到g:/git/底下
之後本地端有更新都可以用
$ git push usbBackup --all
把備份端同步
可以用
$git remote
查看有多少remote的東西

$gitk --all
圖形化查詢分支狀態




一點點git

2014年10月28日 星期二

用p4merge合併 -- setup 篇

git 好像是沒有內建合併器@@~

如果branch分支之後,master(parent branch)有被修改(新的commit)當要把branch合併到master中
在merge之前要先將branch切換到master(要合併到的)branch上
在git gui選local merge
合併有可能出現conflict的狀況
這時候就需要引導merge了
git會show出有conflict的地方
例如
v2
<<<<<<< HEAD
v3
=======
v2.1
v2.1.1
>>>>>>> v2

上面是master版本,下面是branch的內容
用git gui 不知道要怎麼跟他說到底要怎模合併,只知道檔案會被改成上面的內容@@~
只好選abort merge
google找到了p4merge這個合併器
http://www.perforce.com/downloads/Perforce/20-User
選擇P4V: Visual Client下載
安裝好之後還需要到 git bash設定
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd '"C:\\Program Files\\Perforce\\p4merge" $BASE $LOCAL $REMOTE $MERGED'
有點小麻煩,重點是在git gui中,顯示conflict的地方案右鍵可以用mergetool,但卻疑似因為我的路徑有空格找不到...
只好在bash底下用 git mergetool來開了
開了之後她會show local跟remote的內容跟不一樣的地方
在最下面在編輯合併後的內容

用p4merge合併 -- setup 篇

利用git history找出程式被改壞的地方

之前一直聽過,前些陣子因為183的說明開始用
git是資料夾base的,要備份的話可以最白癡的直接複製資料夾
但這些日子除了天天commit,打打說明以外好像跟沒用git沒啥差別
直到昨天
話說最近因為要離職了準備把手上的工作ending一下
因為離職在即,改道比較晚,加上身體有點不舒爽
不知怎麼的就把之前寫好的東西改壞了!!~
哭哭,理性的trace code翻片所有可能出錯的地方完全找不到
這時候終於用上git了
查看版本的history可以比較之前版本跟現在的差異處
瀏覽了差異處一樣是沒有頭緒(但總比整個專案翻快得多了)
最後直接回覆成之前commit的版本,確認錯誤是在這次修改造成的(這個操作其實有點問題,應該要在想回復的點上建立新的branch再直接切過去,不然之後的修改都會不見@@~幸好有聽183的先備份了)
恩...的確是這次造成的
再回去check比較的code...終於找到唯一可能的修改
但當下還是不相信這個修改可能會有問題,把先前的版本貼回去之後,問題果然解決了!~鐵錚錚的事實啊!~只好再去思考到底哪裡寫錯了
原來是我用一個value去new一個object但是其實要用object去new才對啊!!!
dim obj2 as new obj(obj1.value)
改成
dim obj2 as new obj(obj1)
就OK了...因為也可以用value去new,但除了value以外其他的值都會是default...語法上正確,邏輯GG~

利用git history找出程式被改壞的地方