Git 有哪些好用的圖形化客戶端?目前用的最多的是?

想要向同事推薦使用Git。對方之前沒有接觸過版本控制的概念,也不熟悉linux shell和命令行。而我一直是在命令行中學習和使用Git的。因此也想找一找合適的客戶端工具。想請教下有經驗人士求推薦。

需要的僅僅是使用git的工具,github for windows/mac 涵蓋的不只是git了,就先不算。


sourcetree 不二之選,windows和mac都能用,完美集成git flow。


謝邀. 我自己幾乎沒有使用 GUI Git 客戶端的經驗(包括 Github for Win/Mac), 主要在命令行下操作, 還有使用一款終端下的 CUI 工具 tig (主頁: jonas/tig · GitHub). GUI 客戶端方面, 我聽到的風評比較好的還有 Atlassian 出的 SourceTree (主頁: Free Mercurial and Git Client for Windows and Mac), 不妨試試.

不過話說回來, Git 是個比較奇葩的工具, 掌握 Git 最好的方式是從它的底層原理開始學習, 理解之後再學上層命令, 了解上層命令是如何操作底層的, 會有豁然開朗, 無師自通的感覺. 從這個角度來講, 通過 GUI 客戶端來學習 Git 是條很糟糕的路子.

=== 2015/08/25 補充 ===

評論裡面有人詢問學習資料, 我推薦以下兩個文檔:

  • Git from the Bottom Up
  • Git Internals

tortoiseGit,唯一推薦(Windows下連命令行都不推薦)

  1. 功能很全,基本上命令行里有的功能在GUI上都有對應,而且設計的位置很合理
  2. 有許多人性化的設計,比如說自動轉換CRLF,Windows下選錯換行符類型就提交是一場災難;再比如說所有需要輸入分支名或者commit的地方都能從相應的對話框當中選
  3. 查看和編輯conflict很方便,不會把帶著&>&>&> &<&<&<的文件就那麼提交上去了
  4. 所有操作最後都落到具體的git命令上,會在一個小的日誌窗口中顯示使用的命令行以及參數,有心的話看這個就能知道這些操作對應到哪些git命令,也就順便學會了命令行

講道理說自己只用命令行的,有幾個知道什麼是reflog的,什麼是rebase onto的,分得清subtree和submodule的,知道準確的submodule用法的……


既然你不熟悉linux,那肯定開發的是Windows軟體了,直接上Visual Studio 2013就可以了,自帶git客戶端。


Mac下我用的是Fork,感覺還可以,界面顏值也不錯:Fork - a fast and friendly git client for Mac


我只用tortoise, tortoise加beyondcompare,是我留在windows上的唯一原因。

把我在下面的評論裡面寫的我為什麼不能離開這兩個工具的原因提上來說一下。

首先,tortoisegit的log窗口非常方便,基本上我所有的操作都是先開log然後再做下一步。在log窗口選擇自己的操作的好處,自己在做什麼,會發生什麼,可以說是一目了然。

其次,最重要的,要加10顆星都不夠的功能,嚮導式的rebase和cherry pick,嚮導式的conflict解決機制。老實說,我沒有發現比這個更好用的了,尤其是我的工作是在框架層的,基本上大家負責製造垃圾趕進度,我負責重構提高質量。大規模重構代碼基本上是我每天的工作,結果就是我很少有merge的時候衝突文件會少於30的,而且,大都是我毫無所知的代碼,沒有tortoise的這個嚮導式的工作界面,我覺得我會瘋掉的。

最後,如上所述,我幾乎每周都要解決上百次文件衝突,再沒有比beyongcompare更好用的比較和merge工具了,因此,bc我是付費買了license的。


Git Extensions, 只針對 Windows,免費開源。它幾乎沒有短板,並且功能完善。我認為它的設計理念是區分操作的上下文 + 有比沒有強

缺點的話,在子模塊切換、拉取遠端等方面用戶體驗確實不如 Source Tree。


title: Git常用命令和Git團隊使用規範指南

date: 2016-04-22 16:22:32

categories: 學習 | Study

description: Git是目前世界上最先進的分散式版本控制系統

---

## 前言

在2005年的某一天,Linux之父Linus Torvalds 發布了他的又一個里程碑作品——Git。它的出現改變了軟體開發流程,大大地提高了開發流暢度,直到現在仍十分流行,完全沒有衰退的跡象。其實一般情況下,只需要掌握git的幾個常用命令即可,但是在使用的過程中難免會遇到各種複雜的需求,這時候經常需要搜索,非常麻煩,故總結了一下自己平常會用到的git操作。本文根據團隊實踐記錄Git入門指南和Git常用命令,文章中不僅記錄了Git的搭建和使用教程,還參考了大量Git團隊使用規範上的經驗,希望大家可以結合自己團隊的實際應用場景讓Git協作優雅的落地。

&> Git是目前世界上最先進的分散式版本控制系統

## 更新記錄

2016年04月22日 - 初稿

閱讀原文 - Git常用命令和Git團隊使用規範指南

**擴展閱讀**

Git Book - https://git-scm.com/book/zh/

git簡明指南 - git - the simple guide

常用 Git 命令清單 - 常用 Git 命令清單

猴子都能懂的GIT入門 - 猴子都能懂的GIT入門

Git教程 - Git教程 - 廖雪峰的官方網站

## SVN與Git的最主要的區別

SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器哪裡得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,如果在區域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就納悶了。

Git是分散式版本控制系統,那麼它就沒有中央伺服器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

## Git搭建和使用

&> Git上手並不難,深入學習還是建議多實踐,可以參考擴展閱讀中廖雪峰的Git教程

### Git服務端

&> 服務端搭建Git很簡單,有更多需求不妨試試Gogs和Gitlab

使用Gogs輕鬆搭建可能比GitLab更好用的Git服務平台 - 使用Gogs輕鬆搭建可能比GitLab更好用的Git服務平台

``` bash

#安裝git

sudo apt-get install git

yum install git

#創建一個git用戶,用來運行git服務

sudo adduser git

#創建證書使用公鑰免密碼登錄(可選)

ssh-keygen -t rsa

vi ~/.ssh/authorized_keys

#初始化Git倉庫

sudo git init --bare sample.git

sudo chown -R git:git sample.git

#禁用shell登錄

vi /etc/passwd

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

#在客戶端上克隆遠程倉庫

git clone git@server:/srv/sample.git

```

管理公鑰推薦使用Gitosis

Gitosis - GitHub - res0nat0r/gitosis: Manage git repositories, provide access to them over SSH, with tight access control and not needing shell accounts.

Gitosis配置手記 - http://debugo.com/gitosis/

管理許可權推薦使用Gitolite

Gitolite - GitHub - sitaramc/gitolite: Hosting git repositories -- Gitolite allows you to setup git hosting on a central server, with very fine-grained access control and many (many!) more powerful features.

### Git客戶端

&> Git客戶端可以按個人習慣來選擇,遵守團隊協作中的Git規範標準才是更重要的

Git - https://git-scm.com/

TortoiseGit - https://tortoisegit.org/

SourceTree - Free Mercurial and Git Client for Windows and Mac

``` bash

#以最基本的Git命令行為例,先下載Git

Git - Downloads

#配置git提交用戶名和郵箱,定義別名方便區分

git config --global user.name "你的姓名"

git config --global user.email "you@example.com"

#克隆倉庫

git clone cap@172.28.70.243:/cap/cap.git

$ git clone cap@172.28.70.243:/cap/cap.git

Cloning into "cap"...

warning: You appear to have cloned an empty repository.

Checking connectivity... done.

#測試推送

touch README

git add README

git commit -m "add readme"

git push origin master

Counting objects: 3, done.

Writing objects: 100% (3/3), 199 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To cap@172.28.70.243:/cap/cap.git

* [new branch] master -&> master

```

## Git常用命令

**符號約定**

- `&` 自定義內容

- `[xxx]` 可選內容

- `[&]`自定義可選內容

``` bash

#初始設置

git config --global user.name "&<用戶名&>" #設置用戶名

git config --global user.email "&<電子郵件&>" #設置電子郵件

#本地操作

git add [-i] #保存更新,-i為逐個確認。

git status #檢查更新。

git commit [-a] -m "&<更新說明&>" #提交更新,-a為包含內容修改和增刪,-m為說明信息,也可以使用 -am。

#遠端操作

git clone & #克隆到本地。

git fetch #遠端抓取。

git merge #與本地當前分支合併。

git pull [&<遠端別名&>] [&<遠端branch&>] #抓取併合並,相當於第2、3步

git push [-f] [&<遠端別名&>] [&<遠端branch&>] #推送到遠端,-f為強制覆蓋

git remote add &<別名&> & #設置遠端別名

git remote [-v] #列出遠端,-v為詳細信息

git remote show &<遠端別名&> #查看遠端信息

git remote rename &<遠端別名&> &<新遠端別名&> #重命名遠端

git remote rm &<遠端別名&> #刪除遠端

git remote update [&<遠端別名&>] #更新分支列表

#分支相關

git branch [-r] [-a] #列出分支,-r遠端 ,-a全部

git branch &<分支名&> #新建分支

git branch -b &<分支名&> #新建並切換分支

git branch -d &<分支名&> #刪除分支

git checkout &<分支名&> #切換到分支

git checkout -b &<本地branch&> [-t &<遠端別名&>/&<遠端分支&>] #-b新建本地分支並切換到分支, -t綁定遠端分支

git merge &<分支名&> #合併某分支到當前分支

```

Git常用命令 - http://gityuan.com/2015/06/27/git-notes/

- workspace: 本地的工作目錄。(記作A)

- index:緩存區域,臨時保存本地改動。(記作B)

- local repository: 本地倉庫,只想最後一次提交HEAD。(記作C)

- remote repository:遠程倉庫。(記作D)

&> 以下所有的命令的功能說明,都採用上述的標記的A、B、C、D的方式來闡述。

``` bash

#初始化

git init //創建

git clone /path/to/repository //檢出

git config --global user.email "you@example.com" //配置email

git config --global user.name "Name" //配置用戶名

#操作

git add & // 文件添加,A → B

git add . // 所有文件添加,A → B

git commit -m "代碼提交信息" //文件提交,B → C

git commit --amend //與上次commit合併, *B → C

git push origin master //推送至master分支, C → D

git pull //更新本地倉庫至最新改動, D → A

git fetch //抓取遠程倉庫更新, D → C

git log //查看提交記錄

git status //查看修改狀態

git diff//查看詳細修改內容

git show//顯示某次提交的內容

#撤銷操作

git reset &//某個文件索引會回滾到最後一次提交, C → B

git reset//索引會回滾到最後一次提交, C → B

git reset --hard // 索引會回滾到最後一次提交, C → B → A

git checkout // 從index複製到workspace, B → A

git checkout -- files // 文件從index複製到workspace, B → A

git checkout HEAD -- files // 文件從local repository複製到workspace, C → A

#分支相關

git checkout -b branch_name //創建名叫「branch_name」的分支,並切換過去

git checkout master //切換回主分支

git branch -d branch_name // 刪除名叫「branch_name」的分支

git push origin branch_name //推送分支到遠端倉庫

git merge branch_name // 合併分支branch_name到當前分支(如master)

git rebase //衍合,線性化的自動, D → A

#衝突處理

git diff //對比workspace與index

git diff HEAD //對於workspace與最後一次commit

git diff && //對比差異

git add & //修改完衝突,需要add以標記合併成功

#其他

gitk //開燈圖形化git

git config color.ui true //彩色的 git 輸出

git config format.pretty oneline //顯示歷史記錄時,每個提交的信息只顯示一行

git add -i //互動式添加文件到暫存區

```

## Git使用規範

Git 使用規範流程 - http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

團隊中的 Git 實踐 - https://ourai.ws/posts/working-with-git-in-team/

構家網 git 團隊協作使用規範 v2 - http://wenku.baidu.com/view/e1430d1b7f1922791788e81e

&> Git使用規範提醒

- 使用Git過程中,必須通過創建分支進行開發,堅決禁止在主幹分支上直接開發。review的同事有責任檢查其他同事是否遵循分支規範。

- 在Git中,默認是不會提交空目錄的,如果想提交某個空目錄到版本庫中,需要在該目錄下新建一個 .gitignore 的空白文件,就可以提交了

- 把外部文件納入到自己的 Git 分支來的時候一定要記得是先比對,確認所有修改都是自己修改的,然後再納入。不然,容易出現代碼回溯

- 多人協作時,不要各自在自己的 Git 分支開發,然後發文件合併。正確的方法應該是開一個遠程分支,然後一起在遠程分支里協作。不然,容易出現代碼回溯(即別人的代碼被覆蓋的情況)

- 每個人提交代碼是一定要 git diff 看提交的東西是不是都是自己修改的。如果有不是自己修改的內容,很可能就是代碼回溯

- review 代碼的時候如果看到有被刪除掉的代碼,一定要確實是否是寫代碼的同事自己刪除的。如果不是,很可能就是代碼回溯


雖然題主說Github客戶端不算,但是這裡我還是得提一下。

先上圖

簡直不能更酷、更簡潔好嘛!!!!!而且它居然是免費的!!!!

當然了,只上圖只能說明顏值高。讓我們再來看看Git官網對Github客戶端的介紹:

GitHub 發布了兩個面向工作流程的 Git 客戶端:Windows 版,和 Mac 版。 它們很好的展示了一個面向工作流程的工具應該是什麼樣子——專註於提升那些常用的功能及其協作的可用性,而不是實現 Git 的 所有 功能.

。。。

你不需要註冊 GitHub 賬號也可以使用這些工具。 儘管它們是按照 GitHub 推薦的工作流程來設計的,並突出提升了一些 GitHub 的服務體驗,但它們可以在任何 Git 倉庫上工作良好,也可以通過網路連接到任意 Git 主機。

鏈接在此:A1.1 其它環境中的 Git - 圖形界面

我已經在公司項目中應用Github客戶端同步代碼了,爽得飛起,而且對任何新手根本無任何門檻,根本不用關心各種命令行,分支啥的根本不在話下。當我體驗了Github客戶端的簡潔易用後,已經迫不及待的寫了一篇筆記形式的文章分享出去了。鏈接在此:如何用Github版本控制非Github庫


好像沒有人提到,來補充一個Gitkraken: Git GUI for Windows, Mac amp; Linux | GitKrakenGit GUI for Windows, Mac amp; Linux | GitKraken

個人在用,感覺挺不錯的,非常好看,讓人感覺很舒服,基本的功能都有,可以連接Github帳號和Bitbucket帳號,放一張圖


Tower


SmartGit,跨平台。雖然Git的確是基於命令行最好了,但是對於從SVN,尤其是TortoiseSVN轉過來的用戶,用用你就明白我在說什麼了。


  • TortoiseGit
  • SmartGit
  • SourceTree
  • Git GUI

如果經常跨平台工作的話,可以使用 SourceTree 或者 SmartGit, 都是不錯的。

這裡有篇文章,也可以稍微參考下:使用Git、Git GUI和TortoiseGit 。


用 Intellij 的 開發工具


肯定是 @rebornix 他們的vscode啊,功能是簡單了點,勝在我需要的都有了,而且全平台,而且載入chromium不崩


說不出命令行好在哪卻非命令行不用的,基本是在裝叉


我推薦smartgit,好用,誰用誰知道,非商業用戶免費使用,你懂的


現在sourcetree是win下最好的git客戶端了


我在 Windows 和 macOS 下用 SourceTree,Linux 下用 gitg / tig / SmartGit。


smartgit 對Gitflow支持很好。對比之下sourcetree對flow支持就不如smart.缺點就是用Java寫的,天生會慢一些


推薦閱讀:

機器學習領域有哪些適合新手學習的 GitHub 項目?
女朋友因為我在github上給別的女生star而生氣合適嗎?
GitHub或者oschina上有哪些有趣且小巧的JAVA EE開源項目?
在github上什麼樣的開源python 項目會比較火?

TAG:Git | 軟體推薦 | GitHub |