想請教下 Git GUI 點樣 sync 番 server 既 file 落黎?

本帖最後由 Super169 於 2016-3-29 10:52 編輯

最近想學下管理自己 D program source, 用左 GitHub 去放 source, 然後用 Git GUI update.
其實我都唔係好識用, 我每次想改野, 就先 clone 個 master 落黎 (如果有變), 開個 local branch, 改完就 push 番上去, 再 merge 落 mater 就 delete 左個 branch.
so far 叫做OK.  可以 keep 住每次既進度, 有乜事 fallback 番睇舊 code 都好方便, 比之前搵每個版本既 zip file 好得多 (當然, 家陣都仲會 keep 每個版本既 zip).
不過, 當我用超過一部機, 如果唔係一次完事再轉機, 有 D 唔係好識點攪.

我用 A 機 開左個 working branch, 中途不斷有 update 上 server, 但未完成.
之後去左 B 機 continue 之前既野, 就唔係好知應該點了.
我 基於 A 機既 branch 再開一個 local branch 叫 home branch, 改完野就 up 上去.
就會有 2 個 branch, 一個係 A 機基於 master 改既 working, 另一個係 B 機基於 working 改既 home.
今日又番到 A 機了, 我在 server 將 B 機改既 home branch, merge 番去 working, 家陣 server 上面 working 已經包左 home 既改動.

問題係, 我 A 機仲 keep 住唔 update 既 working, 我點樣可以將 server 既 update version sync 番落去 A 機?
之前我次次都剷哂 A 機既 source 再 clone 落黎, 好似唔係好正常.  我諗既然有得由 local push 上去, 應該有得由 server pull 番落黎掛.

唔知正路既方法, 應該點做?


另外仲有個問題, 其實我去到 B 機, 都係 continue 之前既改動, 好似開個 home branch 都唔係咁合理.
但係我又無辦法在 B 機 clone 到上面既 working branch 黎改, 所以至開多個 home branch.
心諗當係比我分清楚邊部份係 B 機時改既.  
但係我都好想知, 萬一部機死左重裝後, 點樣 continue 番之前既 branch 而唔駛開過個新既?

本帖最後由 梁炳 於 2016-3-29 15:19 編輯

首先搞清楚concept,由Remote sync落本機有兩個可用operation
一個係pull, 一個係fetch
pull = fetch + merge

$ git checkout master && git pull origin master
$ git fetch origin

唔係好想睇哂你個case...(又working又home, 唔知你講branch名定咩,你自己改既branch名quote住佢,就唔會咁confusing)
一個人兩部機(或以上)做野,最簡單係咁:
1. 一個"master"一個"dev",做野用"dev", "master"就當係stable version
2. 兩個都要推上remote同步
3. 開始工作時checkout dev, 完成工作後(或完成一半都好),每次離開A/B機之前,都要commit所有uncommitted changes去"dev"+push上remote
4. 每次換機開始工作前,都行一行git fetch睇睇係咪同步,有更新就pull
5. 由於每次都清哂uncommitted changes, 所以每次pull都應該都唔會有conflict
6. Merge動作邊部機行都無所謂,首先確保"master"同"dev"都同remote in-sync
i)轉去master,
ii) merge with dev
iii) dev fast-forward去master head
iv) push all branch to remote
7. 咁就完成一個cycle, 呢個時候master同dev係重疊, 要繼續下一round工作,git checkout dev -> 改野 (back to step 3)

當然老手係唔洗嚴格follow以上用法,git好多用法同埋開branch策略
新手試下呢種方法先

P.S.1 其實學識git command好重要
P.S.2 有一個GUI工具叫SourceTree,應該係市面上最好,免費的

TOP

回覆 2# 梁炳


好多謝 Ching 詳細既解釋, 我相信有 D 野我一直都攪錯左.
我一直都係單機用多, 所以都係 local branch, 亦都無試過 checkout.
我想試下重新黎過, 希望唔好再攪錯.  點知整極都係唔得, 唔知邊個 step 出錯.

我上 GitHub 開左個 repostory 叫 "myDummy", 再生左個 branch 叫 "Dev", 準備測試點樣 continue "Dev" 既開發.
我將 B 機既 repository 全部剷哂, 假設去到一部新機, 重新開始, 之後就咁樣做:

1) 首先 Clone Repository - 上 Git Hub copy 條 URL, 再 clone 落 local.  
   我唔識 Git Command, 只係用 Git GUI, 佢一開始只可以 clone (可能我唔識), clone 完 current branch 係 "master".
   
2) Checkout 個 branch, 用 Git GUI 既 Branch->Checkout, 再選 Tracking Branch 入面 "origin/Dev", 然後 checkout
   佢會話 "You are no longer on a local branch.", 即係用緊 remote branch.

3) 家陣佢個 Current Branch 係 "HEAD" 而唔係 "Dev"   (唔知 HEAD 既意思係咪 "Dev" 最頂既位了)
   
4) 我嘗試改下 D file, 再 Rescan, 佢會 show 到 d changes.

5) 之後 [Stage Changed] -> [Sign Off] -> [Commit] -> [Push] 準備 update server.
   按完 [Push], 開始發覺出事, Source Branches 只係得 master, 點樣改 Option 都無變.
   
6) 嘗試照 [Push], 佢真係當我 update "master", 而且當 "master" 無改動, 結果 serer 乜都無變.

我之前就係因為咁, 所以 local create 多個 branch 等佢可以 push 上去, 但之後就完全亂哂.

可能我既 checkout 有問題, 佢一直都唔覺得我係改緊 "Dev", 所以 D change 無 push 去 "Dev".
我用 menu 既 option 去睇 file, 佢分開左 HEAD's Files 同埋 Branch Files, 而 "HEAD's Files" 就係 update 左既版本, "Branch Files" 就係未 update 既 "Dev", 但係搵唔到點樣可以用 HEAD 去 更新 "Dev".

唔知 ching 有無玩過 Git 既 GUI, 要 checkout 個 branch 黎改, 應該點做?  我係咪有 D 地方做錯左呢?   

我會嘗試睇下 D command 點用, 但係家陣仲有好多野唔清楚, 暫時都係 GUI 方便 D.

TOP

本帖最後由 梁炳 於 2016-3-29 20:18 編輯

首先,唔好混合用GitHub個Web UI又用你個GUI client, 對新手非常容易搞亂
永遠用你部電腦個GUI client或者打command,之後推上去Github
Github個網,除左create project果下,之後可以直頭唔上

1. 一Clone落來係已經checkout左master,正常
2. 要checkout "dev", command係打"git checkout dev" (如果未create, 就打"git branch dev")
GUI到可能係double click "origin/dev", 之後佢會create一個local branch,都係叫"dev"

你要做到一個效果就係有一個local叫"dev"的branch tracking "origin/dev"
("origin"只係一個名,係你預設既remote)
(如果你checkout左"origin/dev"就做野,你d commit會入左"黑洞")
master要永遠推上origin/master, dev永遠推上origin/dev
master -> origin/master
dev -> origin/dev
咁就可以開始做野

不過呢樣係git入面唔係必然,你可以用緊"dev", 但推上origin/master
不過我就從來都唔會咁做
所以你要小心睇你個GUI做緊D乜,用command好處係你100%控制到做乜
我唔識你用果個GUI,我用SourceTree的

TOP

本帖最後由 Super169 於 2016-3-29 20:51 編輯

回覆 4# 梁炳


唔該哂 ching 咁熱心幫忙.

我頭先一直在試 SourceTree, 攪左好耐, 好似做到 push 可以選 origin/dev  了.  (其實都唔係好記得做過乜, 要多試幾次).
不過, 唔知點解, 最後一步問我 password, 我入左 (肯定無錯), 佢話 invalid password.
之後, 再點攪佢都唔再問了.
上網搵, 話要入 Show Hosted Repositories 果改, 我一入去就彈 Login failed for your GitHub account.
之後就不斷轉, 轉成幾分鐘都唔出.
我 uninstall 左再裝番, 都係一樣, 佢好似唔會 清 D setting.
唔知仲有無方法比我 reset 佢記低左既 GitHub 個 password?

P.S.
重裝後可以 Edit Accounts 改番了, 再試.

TOP

本帖最後由 hihihi123hk 於 2016-3-29 22:06 編輯

順帶一提

gitlab.com 有無限免費 private repo ,離開部機嗰陣緊係乜都Push 上去先啦(git checkout -b )

我都準備將自己 host 嘅 gitlab 轉過去 gitlab.com

via HKEPC Ionic Reader v1.2.9 - iPhone

TOP

回覆 4# 梁炳


Ching, 唔該哂, 玩左幾粒鐘, 終於算係可以用 SourceTree 不斷 咁做到我想要既野.

因為我家陣得一部機, 想扮下唔同地方 update, 所以會上去 github 個網直接改下野.

雖然好似都仲係有 D 唔係好順手, 但愎慢應該會慣.

唔該哂 ching, 希望聽日番到去 A 機, 可以 continue 今晚既 change.
(因為 A 機在公司, 有 proxy 既, 有時屋企試左得既野, 番公司又有未必得.  Git Desktop 就已經裝唔到了.)

TOP

你得一部機,想試驗兩部機點sync。
應該在一部機兩個不同folder,clone同一個remote github repository。
之後分別改動呀push呀pull呀。
同一部機兩個folder要比較異同都容易啲。

TOP

本帖最後由 Super169 於 2016-3-30 10:02 編輯

番到公司....真係出問題.   一開始又係話 login 唔到, 同樣再去 Edit Accounts  改番 password.  
出左個唔知乜事既 error:


唔知可以點攪.....

update:不過....唔理個 error 照去, 又可以 clone 到.
update: 唔知係咪 github 出問題, clone 完一次, 再 clone 另一個 project 又出 error.
update: 只係成功左一次, 再去就次次都唔得了.
update: 唔通真係咁黑仔, github 出事?  我用 Git GUI 都去唔到.
update: 一額汗, 用得番 Git GUI, 原來唔知乜事, 佢改左個 .gitconfig file, 刪左 proxy setting.  好在之前有 backup...加番 setting 連 SourceTree 都用得到.
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

重覆自己做過既野, 又再出事, 終於搵到原因了, 可能係 SourceTree 既 bug.
當我嘗試改左個 project folder, 佢就會刪左 proxy setting.  兩樣野九唔搭八, 應該係刪錯野.
試左幾次, 好肯定每次都只係改 project folder, 乜都無攪過, save 完再去睇下 .gitconfig, 個 proxy setting 就無左了.
只要自己加番上去, 再入 SourceTree 就無事了.

雖然呢個改動, 應該裝完只係改一次就夠, 但真係玩死人.....

家陣用一部機 clone 左兩個 folder 試緊, 唔該 幾位 ching 幫手, 等我試多 D 應該會熟手D, 就無咁易出事.

TOP