flow實作 - github tag




初學者Git:明確的實踐指南 (20)

好的,在PJ Hyett看到這篇文章後 ,我決定跳到最後,然後和Git一起去。

所以我需要的是一個初學者對Git的實用指南。 “初學者”被定義為知道如何處理他們的編譯器的人,在某種程度上理解Makefile是什麼,並且已經觸及源代碼控製而不能很好地理解它。

“實用”被定義為這個人不想詳細了解Git在後台做什麼,甚至不關心(或知道)它是否分發。 你的答案可能會暗示可能性,但是試圖針對那些希望將“主”存儲庫保存在一個備份和安全的“服務器”上的初學者,並將其本地存儲庫視為“客戶”資源。

所以:

安裝/設置

使用代碼

標記,分支,發布,基線

其他

其他Git初學者的參考

深入Git

我會不時地瀏覽這些條目並“整理”它們,以便它們具有一致的外觀/感覺,並且很容易掃描列表 - 隨意遵循簡單的“標題 - 簡要解釋 - 指令列表 - 陷阱和額外信息“模板。 我還會鏈接到上面的項目符號列表中的條目,以便以後很容易找到它們。


Git重置

假設你拉一下,把它合併到你的代碼中,然後決定你不喜歡它。 使用git-log或tig,並找到想要返回的任何位置(可能是您在提交/合併之前的最後一次提交)的哈希值,然後執行以下操作:

# Revert to a previous commit by hash:
git-reset --hard <hash>

您可以使用HEAD ^作為之前提交的快捷方式,而不是哈希。

# Revert to previous commit:
git-reset --hard HEAD^

git的圖形用戶界面

Git GUI

附帶git - 從命令行運行git gui ,Windows msysgit安裝程序將其添加到“開始”菜單。

Git GUI可以完成你需要用git做的大部分工作。 包括階段更改,配置git和存儲庫,推送更改,創建/檢出/刪除分支,合併和許多其他事情。

我最喜歡的功能之一是右鍵單擊菜單中的“舞台線”和“舞台大塊”快捷方式,它允許您提交文件的特定部分。 你可以通過git add -i來實現同樣的功能,但我覺得它更易於使用。

它不是最漂亮的應用程序,但它幾乎適用於所有平台(基於Tcl / Tk)

Screenshots | 一個截屏

GitK

也包含在git中。 它是一個git歷史記錄查看器,可讓您可視化存儲庫的歷史記錄(包括分支,創建時間和合併時間)。 您可以查看和搜索提交。

與git-gui很好地結合在一起。

Gitnub

Mac OS X應用程序。 主要是相當於git log ,但與github有一些整合(如“網絡視圖”)。

看起來很漂亮,適合Mac OS X.您可以搜索存儲庫。 對Gitnub最大的批評是它以線性方式顯示歷史(一次只有一個分支) - 它沒有形象化分支和合併,這對於git來說很重要,雖然這是一個有計劃的改進。

Gitnub | github

GitX

打算成為“OS X的git克隆”。

它可以可視化非線性分支歷史記錄,執行提交,查看和搜索提交,還有其他一些很好的功能,例如能夠“快速查看”任何修訂版本中的任何文件(按下文件列表視圖中的空間),導出任何文件(通過拖放)。

它比git-gui / gitk更好地集成到OS X中,並且即使在格外大的存儲庫中也是快速和穩定的。

最初的git存儲庫pieter最近沒有更新(寫作時間超過一年)。 在brotherbard/gitx提供了一個更加主動的維護分支 - 它增加了“側邊欄,抓取,拉取,推送,添加遠程,合併,櫻桃挑選,重定位,克隆,克隆到”

Download | Screenshots | git repository | brotherbard/gitx | 洛朗叉

SmartGit

來自主頁:

SmartGit是分佈式版本控制系統Git的前端,可在Windows,Mac OS X和Linux上運行。 SmartGit適用於那些喜歡通過命令行客戶端進行圖形用戶界面的開發人員,使用Git(當今最強大的DVCS)更加高效。

你可以從SmartGit下載它。

Download

TortoiseGit

適用於Windows用戶的TortoiseSVN Git版本。

它將TortoiseSVN移植到TortoiseGit最新版本1.2.1.0該版本可以完成常規任務,例如commit,show log,diff two版本,創建分支和標記,創建修補程序等。 有關詳細信息,請參閱ReleaseNotes 。 歡迎來貢獻這個項目。

Download

QGit

QGit是一個基於Qt / C ++構建的git GUI查看器。

使用qgit,您將能夠瀏覽修訂歷史記錄,查看修補程序內容和更改的文件,以圖形方式跟隨不同的開發分支。

Download

gitg

gitg是一款針對gtk + / GNOME的git存儲庫查看器。 其主要目標之一是為跨多個桌面的git前端提供更統一的用戶體驗。 它不是在編寫跨平台應用程序,而是通過與其他操作系統的類似客戶端(如GitX for OS X)的密切協作。

特徵

  • 瀏覽修訂歷史。
  • 處理大型版本庫(加載linux版本庫,17000+版本,1秒以內)。
  • 提交更改。
  • 階段/不定期的個人大片。
  • 恢復更改。
  • 顯示修訂版本變化的彩色差異。
  • 為給定的修訂瀏覽樹。
  • 導出給定修訂的樹的部分。
  • 提供任何類似'git log'的命令可以理解的構建歷史的refspec。
  • 在歷史視圖中顯示並在分支之間切換。

下載: releasessource

Gitbox

Gitbox是Git版本控制系統的Mac OS X圖形界面。 在單個窗口中可以看到分支,歷史和工作目錄狀態。

日常操作非常簡單:使用複選框進行階段和不停頓的更改。 通過單擊即可提交,拉取,合併和推送。 雙擊更改以使用FileMerge.app顯示差異。

Gitbox

Gity

Gity網站沒有太多的信息,但從那裡的截圖看來,它是一個功能豐富的開源OS X git gui。

Downloadsource

Meld

Meld是一個視覺差異和合併工具。 您可以比較兩個或三個文件並對其進行編輯(動態更新)。 您可以比較兩個或三個文件夾並啟動文件比較。 您可以瀏覽和查看流行版本控制系統(如CVS,Subversion,Bazaar-ng和Mercurial [ 和Git ])的工作副本。

Downloads

Katana

Steve Dekorte的OSX Git GUI。

匆匆一瞥,看看哪些遠程分支有變動拉和本地回購有推動變化。 支持添加,提交,推送,拉取,標記和重置的git操作,以及突出顯示本地更改和添加的項目hieracy的可視化差異和可視化瀏覽。

1個倉庫免費,25美元以上。

Katana

Sprout(以前稱為GitMac)

專注於使Git易於使用。 具有原生Cocoa(類似mac)UI,快速存儲庫瀏覽,克隆,推/拉,分支/合併,視覺差異,遠程分支,易於訪問終端等。

通過使最常用的Git動作直觀且易於執行,Sprout(以前的GitMac)使Git用戶友好。 與大多數Git工作流程兼容,Sprout非常適合設計師和開發人員,團隊協作以及高級和新手用戶。

下載 | 網站

Tower

適用於Mac OSX的功能豐富的Git GUI。 30天免費試用,單用戶授權59美元。

Download | Tower

EGit

EGit是Git版本控制系統的Eclipse Team提供者。 Git是一個分佈式SCM,這意味著每個開發人員都可以完整復制代碼的每個修訂版本的所有歷史記錄,從而快速且多功能地查詢歷史記錄。

EGit項目在Git的JGit Java實現之上實現Eclipse工具。

Download | EGit

Git擴展

適用於Windows的開源代碼 - 將您需要使用Git的所有內容安裝在一個軟件包中,易於使用。

Git Extensions是一個工具包,可以讓Windows更直觀的使用Git。 外殼擴展將在Windows資源管理器中進行整合,並在文件和目錄上顯示上下文菜單。 還有一個Visual Studio插件可以使用Visual Studio中的git。

Download

非常感謝dbr對git gui的解釋。

SourceTree

SourceTree是Git,Mercurial和SVN的免費 Mac客戶端。 由Bitlassucket後面的人Atlassian構建,似乎與任何VC系統都可以很好地協同工作,這使得您可以掌握單個工具以用於所有項目,但是它們是版本控制的。 功能豐富,免費。

適合新手和高級用戶的專家準備和功能包裝:

查看傳出和傳入的變更集。 櫻桃採摘分支機構之間。 修補程序處理,改版,存儲/擱置等等。

Download | SourceTree


Console UI - Tig

安裝:

apt-get install tig

用法

While inside a git repo, type 'tig', to view an interactive log, hit 'enter' on any log to see more information about it. h for help, which lists the basic functionality.

瑣事

"Tig" is "Git" backwards.


How can I create a branch on a remote repository?

Assuming that you have cloned your remote repository from some single remote repository.

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch

How do you merge branches?

If you want to merge a branch (eg master to release ), make sure your current branch is the target branch you'd like to merge into (use git branch or git status to see your current branch).

Then use

git merge master

(where master is the name of the branch you want to merge with the current branch).

If there are any conflicts, you can use

git diff

to see pending conflicts you have to resolve.


How do you see the history of revisions to a file?

git log -- filename

你如何“標記”一組特定的修訂版本

如何為特定文件集“標記”“標記”或“釋放”特定修訂集,以便以後隨時可以拉取該修訂版?

使用git tag命令。

為了簡單地“標記”當前版本,您只需運行..

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

要列出當前標籤,只需運行沒有參數的git tag-l (小寫L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

要刪除標籤,請使用-d標誌:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

要標記特定的(上一個)提交,只需執行..

git tag [tag name] [revision SHA1 hash]

例如:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

注意:默認情況下,git會創建一個“輕量級”標籤(基本上是對特定修訂版的引用)。 “正確的”方法是使用-a標誌。 這將啟動您的編輯器,要求輸入標籤消息(與請求提交消息相同,您也可以使用-m標誌在命令行上提供標籤消息)。 使用帶註釋的標籤創建一個具有自己的ID,日期,標籤(作者)和可選的GPG簽名(使用-s標籤)的對象。 欲了解更多信息,請參閱這篇文章

git tag mytagwithmsg -a -m 'This is a tag, with message'

要使用註釋列出標籤,請使用-n1標誌顯示每條標籤消息的1行( -n245顯示每個註釋的前245行,等等):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

有關更多信息,請參閱git-tag(1)手冊頁


你如何分支?

git倉庫中的默認分支稱為master

創建新的分支機構使用

git branch <branch-name>

查看當前存儲庫類型中所有分支的列表

git branch

如果你想切換到另一個可以使用的分支

git checkout <branch-name>

創建一個新的分支並切換到一步

git checkout -b <branch-name>

要刪除分支,請使用

git branch -d <branch-name>

要使用當前分支的更改創建分支,請執行

git stash
git stash branch <branch-name>

你如何建立一個共享的團隊存儲庫?

here描述瞭如何建立一個正常的存儲庫 - 但是你如何建立一個團隊存儲庫,每個人都可以從中拉出並推送?

使用共享的NFS文件系統

假設你的團隊已經擁有一個可以使用的共享組成員身份。

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

要開始使用這個存儲庫,最簡單的事情就是從已經使用的本地存儲庫開始:

cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master

其他人現在可以克隆並開始工作:

cd your/local/workspace
git clone /your/share/folder/project.git

使用SSH

在目標服務器上設置用戶帳戶。 無論您使用沒有密碼的帳戶,使用密碼的帳戶還是使用authorized_keys取決於您所需的安全級別。 看看通過SSH配置Git獲取更多信息。

如果所有開發人員使用相同的帳戶訪問此共享存儲庫,則不需要像上面那樣使用--shared選項。

以與上面相同的方式啟動存儲庫之後,您可以像這樣進行初始推送:

cd your/local/workspace/project
git remote add origin [email protected]:/path/to/project.git
git push origin master

看到與上述相似? 另外唯一可能發生的事情是,如果帳戶有密碼,SSH會要求輸入密碼。 如果您在沒有密碼的帳戶上收到此提示,則SSH服務器可能已禁用PermitEmptyPasswords

克隆現在看起來像這樣:

cd your/local/workspace
git clone [email protected]:/path/to/project.git

如何安裝Git

在Windows上:

安裝msysgit

有幾個下載:

  • Git:除非您特別需要以下其他選項之一,否則請使用此選項。
  • PortableGit:如果您希望在PC上運行Git而不在該PC上安裝(例如,從USB驅動器運行Git),請使用此選項。
  • msysGit:如果你想開發Git本身,請使用它。 如果你只是想為你的源代碼使用Git,但不想編輯Git的源代碼,你不需要這個。

這也安裝了一個Cygwin bash shell,所以你可以在更好的shell(比cmd.exe)中使用git ,並且還包括git-gui(可以通過git gui命令或者Start > All Programs > Git菜單訪問)

Mac OS X

使用git-osx-installer ,或者也可以從源代碼安裝

通過包管理器

使用您的本地軟件包管理器安裝git 。 例如,在Debian(或Ubuntu)上:

apt-get install git-core

或者在Mac OS X上,通過MacPorts

sudo port install git-core+bash_completion+doc

...或fink:

fink install git

...或者Homebrew

brew install git

在基於Red Hat的發行版中,例如Fedora:

yum install git

在Cygwin中,可以在“devel”部分找到Git包

從源代碼(Mac OS X / Linux / BSD /等)

在Mac OS X中,如果您安裝了Developer Tools,則可以非常輕鬆地從源代碼編譯Git。 從http://git-scm.com/下載最新版本的Git作為.tar.bz.tar.gz ,並將其解壓縮(雙擊Finder)

在Linux / BSD /等。 它應該大致相同。 例如,在Debian(和Ubuntu)中,您需要通過apt安裝build-essential包。

然後在一個終端中, cd到你提取文件的地方(運行cd ~/Downloads/git*/應該可以),然後運行..

./configure && make && sudo make install

這會將Git安裝到默認位置( /usr/local - 因此git將位於/usr/local/bin/git

它會提示你輸入你的密碼(對於sudo ),這可以寫入/usr/local/目錄,只能由“root”用戶訪問,所以sudo是必需的!

如果你將它安裝在不同的地方(所以Git的文件沒有與其他工具混合),請使用--prefix和configure命令:

./configure --prefix=/usr/local/gitpath
make
sudo make install

這會將git二進製文件安裝到/usr/local/bin/gitpath/bin/git - 所以你不必每次都輸入這個文件,你應該把/usr/local/bin/gitpath/bin/git添加到你的$PATH ~/.profile

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

如果您沒有sudo訪問權限,則可以使用--prefix=/Users/myusername/bin並安裝到您的主目錄中。 請記住將~/bin/添加到$PATH

腳本x-git-update-to-latest-version自動完成很多操作:

這個腳本更新我的git倉庫的本地克隆(locale at〜 ~/work/track/git ),然後配置,安裝(在/usr/local/git - git describe )並更新/usr/local/git符號鏈接。

這樣,我可以在我的PATH擁有/usr/local/git/bin ,並且我總是使用最新版本。

該腳本的最新版本也安裝了手冊頁。 你需要調整你的MANPATH來包含/usr/local/git/share/man目錄。


如何將其配置為忽略文件:

讓git忽略你不希望跟踪的文件是非常有用的。

忽略一個文件或一組文件提供一個模式。 git的模式語法非常簡單,但功能強大。 它適用於我將在下面提到的所有三個不同的文件。

  • 空白行忽略沒有文件,它通常用作分隔符。
  • 注重#的線條充當評論。
  • !! 前綴是可選的並且將否定該模式。 匹配的任何否定模式將覆蓋較低的優先模式。
  • 支持高級表達式和通配符
    • 例如:模式: *。[oa]將忽略以.o或.a結尾的所有文件(對象和歸檔文件)
  • 如果一個模式有一個以斜杠結尾的目錄,git只會匹配這個目錄和它下面的路徑。 這排除了比賽中的常規文件和符號鏈接。
  • 前導斜杠將匹配該路徑名中的所有文件。
    • 例如:pattern /*.c將匹配文件foo.c,但不匹配bar / awesome.c

來自gitignore(5)手冊頁的很好的例子:

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

通常有三種不同的方式來忽略未跟踪的文件。

1)忽略存儲庫的所有用戶:

將名為.gitignore的文件添加到您的工作副本的根目錄中。

編輯.gitignore以匹配您的文件應該/不應該被忽略的首選項。

git add .gitignore 

並在完成時提交。

2)僅忽略您的存儲庫副本:

使用您的首選模式在工作副本中添加/編輯文件$ GIT_DIR / info / exclude

例如:我的工作副本是〜/ src / project1,所以我會編輯〜/ src / project1 / .git / info / exclude

你完成了!

3)在所有情況下,在您的系統上忽略:

您的系統的全局忽略模式可以放在一個名為您想要的文件中。

我個人被稱為〜/ .gitglobalignore

然後我可以讓git通過使用以下行編輯我的〜/ .gitconfig文件來知道這個文件:

core.excludesfile = ~/.gitglobalignore

你完成了!

我發現gitignore(5)手冊頁是獲取更多信息的最佳資源。


提交更改

一旦你編輯了一個文件,你需要將你的修改提交到git。 當你執行這個命令時,它會要求提交一條提交信息 - 這只是一小段文字,告訴大家你已經改變了什麼。

$ git commit source/main.c

將在目錄./source/中提交文件main.c

$ git commit -a # the -a flag pulls in all modified files

將提交所有更改的文件(但不是新文件,那些需要使用git-add添加到索引中的文件)。 如果你只想提交某些文件,那麼你將需要先使用git-add進行階段化,然後在沒有-a標誌的情況下提交。

提交只會改變你的本地倉庫,而不會改變遠程倉庫。 如果您想將提交發送到遠程存儲庫,那麼您需要進行推送。

$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository

對於來自CVS或SVN的人來說,這是一個變化,因為現在提交到中央存儲庫需要兩個步驟。


GIT的工作流示例。

Git非常靈活並且適應任何工作流程,但是不執行特定的工作流程可能會產生負面影響,使得難以理解您可以在線性“備份”工作流程之外使用git做什麼,以及例如分支有多有用。

這篇博文很好地解釋了一個非常簡單而有效的工作流程,非常容易使用git進行設置。

從博客文章中引用:我們認為origin / master是HEAD源代碼始終反映生產就緒狀態的主要分支:

工作流已經變得非常流行,已經做出了一個實現這個工作流的項目: git-flow

一個簡單的工作流程的好例子,您可以在其中進行所有變更開發,並且只有在代碼處於生產狀態時才推送到主人工:

現在讓我們假設您想要開發一個新功能,或者重構一個模塊。 你可以創建一個新的分支,我們可以稱之為“特徵”分支,這需要一些時間並且可能會破壞一些代碼。 一旦你的功能“足夠穩定”並且想要將它“移近”生產,就可以將你的功能分支合併到開發中。 當所有錯誤在合併之後被分類出來並且你的代碼通過了所有的測試之後,你會將你的改變推送到master中。

在所有這些過程中,你會發現一個可怕的安全漏洞,必須馬上修復。 你可以有一個叫做hotfixes的分支,這個分支比普通的“開發”分支更快地將其推回到生產環境中。

在這裡,您可以看到這個功能/修補程序/開發/生產工作流程的樣子(在博客文章中有詳細解釋,我重複一遍,博客文章詳細解釋了整個過程,比我做得更好。


Pro Git免費書絕對是我的最愛,特別適合初學者。


git status是你的朋友,經常使用它。 很適合回答以下問題:

  • 這個命令做了什麼?
  • 我在哪個分支上?
  • 我即將做出什麼樣的改變,並且我什麼都忘記了?
  • 上次我參與這個項目(幾天,幾週,或者幾個月前)時,我是否處於某種程度?

svn status不同,即使在大型項目中, git status也會立即運行。 我經常在學習git時經常使用它,以確保我對發生的事情的精確模型是準確的。 現在我主要只是用它來提醒自己,自從我上次提交以來我發生了什麼變化。

顯然,如果您的.gitignore配置合理,它會更有用。


Push and pull changes

In an simplified way, just do git push and git pull . Changes are merged and if there's a conflict git will let you know and you can resolve it manually.

When you first push to a remote repository you need to do a git push origin master (master being the master branch). From then on you just do the git push .

Push tags with git push --tags .


I got started with the official Git tutorial . I think it's practical enough for beginners (I was, and still am, a beginner, by your definition! I barely grasp makefiles, I've only played a bit with Apache Subversion, etc.).



這是PJ Hyett的文章的副本,因為它不再可用:

Git不難

2008年11月23日

當我們告訴人們為什麼他們應該使用Git而不是Subversion時,這個指導意義在於:“Git比Subversion更好地實現Subversion,但它的功能遠不止於此。”

“更多”是由一系列讓Git真正發光的東西組成的,但對於那些來自其他SCM如Subversion的用戶來說,這可能是相當大的壓力。

也就是說,沒有什麼能夠阻止你使用Git,就像你在進行轉換時使用Subversion一樣。

假設你已經安裝了必要的軟件並且有一個遠程倉庫,這就是你如何獲取代碼並用Subversion推回你的修改:

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

你將如何在Git中做到這一點:

$ git clone [email protected]:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

還有一個命令是讓它在Git中發生。 這個額外的命令有很大的影響,但為了這篇文章的目的,這就是我們正在談論的一個額外命令。

看,它真的不那麼難。

更新:我不想提及,與Subversion相比,在Subversion中更新本地副本相當於分別是svn updategit pull 。 在這兩種情況下只有一個命令。


那麼,儘管你問我們不是“簡單地”鏈接到其他資源,但是當已經存在一個真正相當不錯的社區成長(並且不斷增長)的資源時,這是非常愚蠢的: Git Community Book 。 嚴重的是,這個問題中的這20多個問題將會是簡潔而一致的。 Git Community Book既可以HTML和PDF格式提供,也可以以清晰,格式良好並經過同行評審的答案和格式回答您的許多問題,讓您可以直接跳到您的問題。

唉,如果我的帖子真的讓你感到不安,那麼我會刪除它。 只是這樣說。







version-control