1. 程式人生 > >git init 和 git init –bare 的區別和解決www下沒有原始檔無法看的的問題

git init 和 git init –bare 的區別和解決www下沒有原始檔無法看的的問題

git init 和 git init –bare 的區別
搞過網站開發的人,有時候會遇到這樣的問題,在開發網站的時候,在伺服器的web或者www目錄下建立個倉庫,每次開發都推上去,直接部署了,可以直接訪問,但是在建立倉庫的時候,弄不好,就出現web目錄下沒有HTML,js,php檔案就與git init命令有關

使用命令”git init –bare”git –bare init 一個意思,(bare漢語意思是:裸,裸的)初始化的版本庫(暫且稱為bare repository)只會生成一類檔案:就是在本地目錄下可以看到的.git目錄下的檔案,用於記錄版本庫歷史記錄的.git目錄下面的檔案;
而不會包含實際專案原始檔的拷貝

;所以該版本庫不能稱為工作目錄(working tree);
如果你進入版本目錄,就會發現只有.git目錄下的檔案,而沒有其它檔案;
當我們訪問網站的時候就無法訪問了,因為就沒有HTML檔案嘛。
就是說,這個版本庫裡面的檔案都是.git目錄下面的檔案,把原本在.git目錄裡面的檔案放在版本庫的根目錄下面;

[[email protected] githome]# git init --bare
Initialized empty Git repository in /home/echo/githome/
[[email protected] githome]# ll
total
32 drwxr-xr-x. 2 root root 4096 2010-01-05 13:46 branches -rw-r--r--. 1 root root 66 2010-01-05 13:46 config -rw-r--r--. 1 root root 58 2010-01-05 13:46 description -rw-r--r--. 1 root root 23 2010-01-05 13:46 HEAD drwxr-xr-x. 2 root root 4096 2010-01-05 13:46 hooks drwxr-xr-x. 2 root root 4096 2010-01-05 13:46 info drwxr
-xr-x. 4 root root 4096 2010-01-05 13:46 objects drwxr-xr-x. 4 root root 4096 2010-01-05 13:46 refs

這些檔案的意思

|-- HEAD         # 這個git專案當前處在哪個分支裡
|-- config       # 專案的配置資訊,git config命令會改動它
|-- description  # 專案的描述資訊
|-- hooks/       # 系統預設鉤子指令碼目錄
|-- index        # 索引檔案
|-- logs/        # 各個refs的歷史資訊
|-- objects/     # Git本地倉庫的所有物件 (commits, trees, blobs, tags)
`-- refs/        # 標識你專案裡的每個分支指向了哪個提交(commit)。

換句話說,不使用–bare選項時,就會生成.git目錄以及其下的版本歷史記錄檔案,這些版本歷史記錄檔案就存放在.git目錄下;而使用–bare選項時,不再生成.git目錄,而是隻生成.git目錄下面的版本歷史記錄檔案,這些版本歷史記錄檔案也不再存放在.git目錄下面,而是直接存放在版本庫的根目錄下面

感覺寫的好繞啊,就一個意思:
git –bare init只有歷史版本庫檔案,裸(bare)倉庫裡只儲存歷史和元資訊,不會維護工作目錄。

git init 有專案原始檔,還有歷史版本庫檔案,歷史版本庫檔案放在.git目錄下

用”git init”初始化的版本庫,使用者也可以在該伺服器端的目錄下執行所有git方面的操作。但別的使用者在將更新push上來的時候容易出現衝突。

比如有使用者在該目錄(就稱為伺服器的遠端倉庫)下執行git操作,且有兩個分支(master 和 b1),當前在master分支下。另一個使用者想把自己在本地倉庫(就稱為本地倉庫)的master分支的更新提交到遠端倉庫的master分支,他就想當然的敲了

git push origin master:master

於是乎出現

因為遠端倉庫的使用者正在master的分支上操作,而你又要把更新提交到這個master分支上,當然就出錯了。

但如果是往遠端倉庫中空閒的分支上提交還是可以的,比如

git push origin master:b1 還是可以成功的

解決辦法就是使用”git init –bare”方法建立一個所謂的裸倉庫,之所以叫裸倉庫是因為這個倉庫只儲存git歷史提交的版本資訊,
而不允許使用者在上面進行各種git操作,如果你硬要操作的話,只會得到下面的錯誤(”This operation must be run in a work tree”)
這個就是最好把遠端倉庫初始化成bare倉庫的原因。

當你在開發的web網站時,用git init吧
但是還有問題:
當本地倉庫向遠端倉庫push時,如果遠端倉庫正在push的分支上(如果當時不在push的分支,就沒有問題), 那麼push後的結果不會反應在work tree上,也即在遠端倉庫的目錄下對應的檔案還是之前的內容。
解決方法:伺服器端必須執行命令:git reset –hard才能看到push後的內容。
這樣好麻煩的

可能會遇到這個問題
Git: push 出錯的解決 master -> master (branch is currently checked out)
這是由於git預設拒絕了push操作,需要進行設定,修改伺服器端的.git/config新增如下程式碼:


[receive]
denyCurrentBranch = ignore

相關推薦

git init git initbare區別解決www沒有原始檔無法的的問題

git init 和 git init –bare 的區別 搞過網站開發的人,有時候會遇到這樣的問題,在開發網站的時候,在伺服器的web或者www目錄下建立個倉庫,每次開發都推上去,直接部署了,可以直接訪問,但是在建立倉庫的時候,弄不好,就出現web目錄下沒

shell、cmd、dos腳本語言區別聯系

同時 environ 正常 erl urn exe comm displays 進行 問題一:DOS與windows中cmd區別 在windows系統中,“開始-運行-cmd”可以打開“cmd.exe”,進行命令行操作。 操作系統可以分成核心(kernel)和Shell

location.reload() location.replace()的區別應用

pan 內存 創建 trac 訪問 親測 能夠 不能 ace 首先介紹兩個方法的語法: reload 方法,該方法強迫瀏覽器刷新當前頁面。語法: location.reload([bForceGet])

靜態庫動態庫的區別win平臺linux平臺代碼實現

linux動態庫 聲明 CP 控制臺程序 後綴 差異 創建 SM mes 什麽是庫   庫是寫好的,現有的,成熟的,可以復用的代碼。現實中每個程序都要依賴很多基礎的底層庫,不可能每個人的代碼都從零開始,因此庫的存在意義非同尋常。   本質上來說,庫是一種可

oracle函數NVL,NVL2NULLIF之間的區別使用

style nbsp from oracl expr nvl2 出現 圖片 null oracle用這麽幾個函數,可以幫助我們解決數據上null或0的處理 1、NVL()函數 1.1)介紹:NVL(expr1,expr2),若expr1為null, 返回expr2; 不為

MyISAMInnoDB的主要區別應用場景

事務安全 形式 acid sam 小型 inno type update 情況下 主要區別: 1).MyISAM是非事務安全型的,而InnoDB是事務安全型的。 2).MyISAM鎖的粒度是表級,而InnoDB支持行級鎖定。 3).MyISAM支持全文類型索引,而Inno

樂觀鎖悲觀鎖的區別使用場合

每次 適合 頻繁 style 優點 獲取數據 行數據 悲觀鎖 取數據 一:樂觀鎖(Optimistic Lock)  每次獲取數據的時候,都不會擔心數據會被修改,所以每次獲取數據時都不會進行加鎖。  但是在更新數據的時候,需要判斷該數據是否被別人修改過,如果數據被其他線程修

進程線程的區別聯系

創建 通信 同步 場景 更多 系統 復雜度 進程間 全局變量 1.兩者都是多任務編程方式,都能夠使用計算機的多核資源2.進程的創建刪除消耗的計算機資源比線程要多3.進程空間獨立,數據相互不幹擾,有專門的IPC,線程使用全局變量進程通信4.一個進程可以創建多個線程分支,兩者之

進程線程的區別聯系??

銷毀 需要 方式 進程間 的區別 多核 線程 安全 進行 1、進程和線程都是多任務編程方式,都可以利用計算機的多核; 2、多進程的創建和銷毀要比多線程消耗更多資源; 3、多進程空間獨立數據更安全,有專門的進程間通信方式進行交互; 4、一個進程包含多個線程,所以線程共享進

Json字串物件之間的區別轉化

一、什麼是Json? Json是一種輕量級的資料交換格式。 {} 花括號表示物件,[] 中括號表示陣列,”” 雙引號內是屬性或值,: 冒號表示後者是前者的值(這個值可以是字串、數字、也可以是另一個數組或物件)。 二、什麼是Json物件?什麼是Json字串? (i)Json物件:是直接可以使用

Android開發 Handler RunnableThread之間的區別聯絡 應用----------------

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

widthmin-width的區別差異性比較

1、正常情況下:     width :給塊級元素/行內塊 元素設定固定的寬度,或者固定百分比的寬度。     min-width:  當盒子內部元素寬度小於 min-width的值時,盒子寬度為 min-width的值,當盒子內容寬度大於

HTTPSSSH方式的區別使用

在管理Git專案上,很多時候都是直接使用https url克隆到本地,當然也有有些人使用SSH url克隆到本地。 這兩種方式的主要區別在於:      使用https url克隆對初學者來說會比較方便,複製https url然後到git Bash裡面直接用

ERPMES系統的區別關係?

1.ERP和MES的區別:ERP(Enterprise Resources Planning)是企業資源計劃,它是在物料需求計劃MRP(Material Requirement Planning)和製造資源計劃MRPⅡ(Manufacturing Resources Planning)的基礎上發展起來的更高層

catalina.out catalina.log 的區別用途

catalina.out catalina.out其實是tomcat的標準輸出(stdout)和標準出錯(stderr),這是在tomcat的啟動腳本里指定的,如果沒有修改的話stdout和stderr會重定向到這裡。所以我們在應用裡使用System.out列印的東西都會到這裡來。另外,如果我們在應

Java基礎------成員變數區域性變數的區別形參問題

在類中的位置不同 (1)成員變數:類中方法外。 (2)區域性變數:方法內部或者方法宣告上。 在記憶體中的位置不同 (1)成員變數:堆記憶體。 (2)區域性變數:棧記憶體。 生命週期不同 (1)成員變數:隨著物件的存在而存在,隨著物件的消失而消失。 (2)區域性變數:隨

? super T? extends T的區別應用

經常看見框架很多這樣的泛型寫法<? extends T>,後來終於看了相關資料才明白。 <? extends T>是指“上界萬用字元”,<? super T>是指下界萬用字元。 比較有趣,而且有點燒腦,歸根結底,還是一個上下轉型的問題。 舉例:有3個類

減治、分治變治的區別聯絡

減治: 利用了一個問題給定例項的解和同樣問題較小例項的解之間的某種關係,常用的有n和n-1的關係,有了這種關係我們可以自頂向下地遞迴求解,也可以自底向上地迭代實現,從較小例項開始求解這一角度來看減治也叫增量法。 減治法的三種方式: 1***.減常量*** 每次迭

轉發重定向的區別過濾器攔截器的區別

spring width 客戶 截器 數據 http image 定向 框架 重定向:客戶端發起兩次請求 不會攜帶數據 轉發:服務端內部跳轉,從客戶端只發起一次請求 SpringMvc默認的跳轉方式是:轉發 SpringMvc中的攔截器:過濾進入SpringMVC

記憶體洩漏記憶體溢位的區別聯絡

1、記憶體洩漏memory leak :是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩漏似乎不會有大的影響,但記憶體洩漏堆積後的後果就是記憶體溢位。 2、記憶體溢位 out of memory :指程式申請記憶體時,沒有足夠的記憶體供申請者使