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

2018年6月1日 星期五

NAS 架設 git server 實戰範例

NAS 架設 git server 實戰範例

其實只要有 SSH+git 就可以架設了,貌似也沒有什麼限制 (git沒有分客戶端跟伺服器端)

伺服器端

這邊要先開好 SSH 可以連進來以及裝好git,簡單來說就是你可以連進這一台並且輸入git命令有東西,這樣就可以了。
再來是環境的部分,使用者建議多件一個名為 git 的使用者,如果是其他名字待會客戶端指令要跟著改。
接下來要開始建立伺服器倉庫,指令比較不一樣,工作目錄就直接使用者文件底下
git init --bare Repos.git
指令下完就在這裡產生一個 Repos.git 的資料夾,到時候倉庫會同步在這裡,以github來說目前的階段就是
你按下新倉庫然後輸入倉庫名稱,不初始化任何東西,此時頁面跳出教你如何上傳指令
的這個狀態。

客戶端

接下來照著 github 上的教學打就可以了,先初始化本地git並且至少有一個提交紀錄。
mkdir Repos
cd Repos

echo "# Repos" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@CHG-NAS:Repos.git
git push -u origin master
然後就傳上去了~就這麼簡單
要改的部分是 git@CHG-NAS:Repos.git
git = 使用者名稱
@CHG-NAS = 服務器IP
:Repos.git = 預設從使用者目錄開始算

2018年5月29日 星期二

github ssh 設定好了還是被要求輸入密碼

Github ssh 設定好了還是被要求輸入密碼

遇到的問題是明明都已經設定好了金鑰,打測試代碼
ssh -T git@github.com
也是顯示成功,怎麼還是需要打密碼?
整個重做步驟不是很多,我就重頭開始說當作一篇教學文章

生成金鑰

可以確定一下自己有沒有產生過
ls -l ~/.ssh/
看一下列表有沒有 id_rsa id_rsa.pub 這兩個文件有的話就有產生了
產生的指令是
ssh-keygen
然後就可以查看公鑰
cat ~/.ssh/id_rsa.pub
把顯示出來的部份複製然後貼到 github 上的
點自己頭像 -> 設定 -> SSH and GPGkey
然後整串看起來是亂碼的的輸入,不打名稱預設會填入這台電腦的電腦名稱
然後會看要鑰匙是黑色的因為還沒連成功過,我們測試一下
ssh -T git@github.com
跑出
Hi USERNAME! You’ve successfully authenticated, but GitHub does not provide shell access.
這樣就是成功了,鑰匙就會變成綠色的就是真的好了

更改 remote

然後就是問題所在了,明明測試都是成功依然要打密碼,網路上也沒搜到相關的說明。
關鍵在於第一次從 github 上創建 github 倉庫的時候預設都是 https 你得自己改選成 ssh才行,這時候上面的給的教學指令會變動成 ssh 用的。
[1] 如果你是建立新倉庫記得按成SSH然後照著說明打就好,以下不用看
[2] 這不是 github 網站上的設定,主要是倉庫的 gitconfig 要改
那麼已經再同步的倉庫怎麼辦呢~我們要手動到去修改,這裡假設倉庫名稱是 sshRepos
cd sshRepos
git remote -v
然後你會看到其中的一段是
(其中的 USERNAME 是使用者帳號記得改)
origin  https://github.com/USERNAME/sshRepos.git (fetch)
origin  https://github.com/USERNAME/sshRepos.git (push)
問題就出在這裡,正確的SSH連接應該為
( 從 https://github.com -> git@github.com )
把他刪除重建成正確的即可
git remote remove origin
git remote add origin git@github.com:/USERNAME/sshRepos.git

git remote -v
最後上傳一次確定是否還需要打密碼
git push origin master

其他

直接進 gitconfig 修改應該是比較快,指令如下
vi .git/config
然後你會看到
[remote "origin"]
        url = https://github.com/USERNAME/sshRepos.git
        fetch = +refs/heads/*:refs/remotes/origin/*
就從這裡改~
  1. https://git@
  2. USERNAME 前面的 /: (改成冒號)

2017年7月26日 星期三

git branch rebase 操作流程指令

git branch rebase 操作流程指令

如果需要共同作者一起開發的話,一定會用到分支的功能,假設是兩個人的狀態下會需要三個分支。
  • 主分支
  • 作者A
  • 作者B

指令懶人包

新增br1分支
git branch br1
切到br1分支
git checkout br1
如果分支尚未建立可以加入 -b 切換同時創造
git checkout -b br1
合併過程
# 先切到br1分支
git checkout br1

# 分支自己與主線先行合併
git rebase master

# 這時候通常會有衝突,瀏覽一下修正衝突(下面再特別說明)
git add *

# 修復衝突繼續衍合
git rebase --continue

# 復原 rebase 回到 rebase 前的狀態
git rebase --abort
# 切回主線合併 (--no-ff 是 把合併的線分開比較好觀察)
git checkout master
git merge br1 --no-ff

# 復原 merge 回到 mrege 前 (preMaster 是 mrege 前 master 的代碼)
git reset "preMaster" --hard
雖然說是回到,但是merge產生的那個新點是沒有被刪除了只是沒顯示而已,可以使用 git reflog 查先前的點。如果要用快捷可以使用下面兩個
  • merge 使用 git reset HEAD^ —hard
  • rebase 使用 git reset ORIG_HEAD —hard
    要注意的是 ORIG_HEAD 是在操作危險操作時紀錄上一個點,你如果沒有當下馬上用這個ORIG_HEAD 會被蓋過去就不能用了,只能自己查記錄看到底是哪個點 reset 過去。
    HEAD^指的則是相對於目前的上一個點。
合併到主線了,這麼做有個好處是合併的產生的衝突由該分支的作者自己處理,處理完之後也可以決定要不要並回去;而不是直接 merge 把責任交給主作者去看了。
合併完成之後可以刪除不要的分支,要個別刪除本地和遠端的
# 刪除遠端分支
git push origin :fixbug

# 刪除本地分支
git branch -d fixbug
如果是同一條分支你想整理先前的提交可以使用
# 進入互動模式(對你要提交的點 pick 改 f)
git rebase tag -i

# rebase -i 中設置錯了但已經 :wq 離開了,重新設置
git rebase --edit-todo

# 修改提交信息(可選不改就不會保留)
git commit --amend

# 萬事 ok 就繼續吧
git rebase --continue
-i 是互動模式,就像 git add -i 的意思一樣,可以想像成一個方便的工具給你用的感覺。
這個可以讓你修改前面的提交狀況,決定哪些提交點要動哪些不要動,功能有重新提交、合併提交、刪除提交等等很多;
這邊的方式可以想像成另開一個副本對他做修改,所有 rebase 後的節點都是新的節點,最後再加到master之後 (前面的指令切回主線去 mrege)。
另外第一個節點不能動他,要保持是 pick 不然會出現
‘fixup’ without a previous commit
這時候就回去修改 rebase -i 的信息吧~


衝突

不同分支rebase的時候有衝突是正常的,去修復就好了,衝突通常長這個樣子
<<<<<<Head
主線上的內容
=====
分叉上的內容
>>>>>> fixbug上的提交名稱
如果你的分支再分支之後又建立好幾個節點,這邊你就有可能要修幾次衝突,要注意第一次修復的時候可能不是 fixbug 最後那個提交節點的內容。
就是前面提到的不要太多節點,不然這裡要修好幾次;注意看一下應該可以看懂,我一開始不知道會從分岔之後的第一節點開始,一直想說奇怪怎麼會這樣內容怪怪的。
大抵就是把有衝突的地方寫出來給你看,看你是要保留哪一邊,或者都不要另改新的。另改新的這樣做可能不太好,沒有被記錄到;修改的時候記得把 << 、 >> 和 == 這三行刪除。
然後就完成拉,第一次做可能有點慌,會覺得這是三米東西。

適用情況

假設只有單人開發也沒什麼需求,簡單直接在主線上開發(單人而以不太會出問題,不是太重要的專案可以不用保護),然後有一天突然發現壞了,你想要退回前3點重來慢慢加功能回來。
作法就是先回到前3點然後直接開新分支,先把要得主功能手動加回來測試這條分支就直接繼續做但不要分太多點。(做完之後可以考慮對這fixbr1做tag標籤,不然rebase完畢之後這一分支會被隱藏)
做完之後一些不影響到的小功能或註解,目前散落在master結尾3點,你就直接在 fixbr1 做 rebase master 他會要你把 fixbr1 從第一點開始,手動與 master 做合併(有幾點就手動並幾次),這時候散落的無關痛癢小功能再加回來就好,不會漏掉;會影響到的代碼當初再分支上就要先測試好。
rebase 會引上分支上的所有分支節點,然後把這些分支節點加到 master 上,新的分支節點是你在 rebase 的時候手動處理衝突的結果。 master的最後一點也會被隱藏就不見了
如何不做 rebaser 而是直接在主線 merge fixbr1 那路線圖上就有支線,雖然說這樣可能比較清楚,但是如果每次都這樣搞你的路線圖就很慘很醜。


合併提交點

常發生的情況是提交之後才發現,有一個小地方沒改到雖然不是太大重點,但是就是心癢癢的只好又提交一個點,然後這個點就顯得很廢又多餘XD
這邊就就介紹如何合併過往的提交點
假設現在有1~4點,現在第4點 master 你想要把,3合併到2
(你可以 checkout 到 3 也可以不用)
現在進入互動模式
git rebase tag2 -i
這也可以是 tag1 有包含到就好
然後會看到選單把你要合併的點3從 pick 改成 f ,存檔之後即可完成。


參考

2017年1月19日 星期四

Git for Windwos 中文本來不是亂碼突然變成亂碼

Git for Windwos 中文本來不是亂碼突然變成亂碼


突然就變成亂碼了重裝又不能解決

移除乾淨

在使用者目錄底下
  • .bash_history
  • .gitconfig
  • .minttyrc
  • .viminfo
還有NTUSER字樣好幾個文件,通通砍了。然後再重裝一次就好了。

2017年1月13日 星期五

Git Bash 基礎指令 和 懶人包

Git Bash 基礎指令 和 懶人包

整理一下新手會用到的基礎指令,還有懶人操作的方式

安裝

一直預設安裝下來就可以了
有一個地方可以考慮取消:
這個勾選之後會在你的右鍵清單內增加選項,個人覺得看了不順眼
安裝完成之後再開啟CMD打入git就可以使用了
他有自己的介面,按下Win搜索git bash開啟他
指令在這裡操作比較好,中鍵是貼上

輸入個人資訊

輸入名稱:
git config --global user.name "YourName"
輸入Email:
git config --global user.email "YourMail@gmail.com"
查看使用者名稱:
cat ~/.gitconfig
詳細設定:
vim ~/.gitconfig
注意:先按 i 下方狀態列變成 插入 才能打字,然後在空白處輸入
[alias]
    cm = commit -m 
    s = status
    l = log
    ck = checkout
    uploadm = push origin master
    upload = push origin
    uploadtag = push origin --tag

[user]
    name = 
    email = @gmail.com
貼上後按 Ecs 然後輸入 :wq 即可存檔離開

指令介紹

先在桌面創一個git_test資料夾,並利用
cd Desktop/git_test/
切到該位置

初始化:

git init

查看狀態:

git s

新增檔案:

git add -i

新增特定檔案:

git add 檔名

提交檔案:

git cm 說明文字
空格或特殊字元前需加 \

查看記錄檔:

git i
# 每一次紀錄都有一行亂碼,那你的提交的存檔點下面會用到

恢復所有檔案到上一次提交狀態:

git reset --hard

恢復單一檔案到上一次提交狀態:

git checkout file

所有檔案回到A點,並可回來最新點

git checkout A
git checkout master
# master 是最新的點

回到A點並放棄A之後的所有點(回不來)

git reset --hard A
# 現在 master 是 A 回不去了
# 如果你的log紀錄還在可以透過 check 回去最新點

圖形介面

gitk&

新增tag

git tag -a "名稱" -m "說明"
過往的提交紀錄
git tag -a "名稱" "提交紀錄"

上傳tag

git push origin --tags

印出tag

$ git tag -l

刪除tag

git tag -d "TAG"

刪除 github 上的 tag

git push origin :refs/tags/"TAG"

新增檔案 - 介紹

  1. 查看當前狀態
  2. 更新檔案
  3. 取消檔案的加入狀態
  4. 新增檔案 (第一次加入)
  5. 選擇性更新
  6. 查看檔案有什麼變動
  7. 離開
  8. 說明

更換檔名

如果是更換檔名要同時做 2 與 4 ,否則會變成刪除後再重建,檔案的追蹤會中斷在這裡。

初始位置

初始位置是使用者文件,如果你的文件不再這裡每次都要cd切,可以更動預設位置的
找到你的git bash安裝位置,預設是在
C:\Program Files\Git\etc
找到bash.bashrc這個檔案使用SublimeText開啟或其他比編輯的程式都可以
  • Sublimtext 要用系統管理員開啟
  • 或者你複製到桌面修改玩在複蓋回去
我的 Git 倉庫都直接放在 Onedrive 上,好處是從A處到B處可以直接繼續開始
或者筆電與桌面桌戶使用時,可以直接同步不用再自己下載。
在檔案結尾處加入(注意空白)
cd OneDrive\\Git\ Repository\\
alias add='git add -i'
alias s='git status'
alias f='start "cmd /c "start "$PWD"""'
第二行是把 add 取代成 git add -i 這樣我就不用輸入這麼長了
上面的取代只是取代 git 後面的字串,git 本身沒辦法替換
比如說 git loglog 取代成 l 所以你只要輸入 git l 即可

忽略執行檔追蹤

某些檔案可是能是不必要上傳或是還原的,可直接忽略才不會每次查看狀態都會跑出來。在倉庫內新增一個記事本在裡面打上 *.exe ,然後儲存檔名為 .gitignore 即可。