2013-12-20 35 views
10

我初始化了一個git倉庫以添加一個Oracle Weblogic服務器的本地實例(是!)以使用git對其進行版本化。Git add命令失敗,說「文件名太長」

oracle文件位於c:\ Oracle中。所以,我需要添加同樣與git

我發出以下命令

的git的init(在C:\它具有Oracle目錄)

添加的.gitignore目錄在C:\和忽視所有在c:\的目錄除了Oracle

然後運行'git status'來查看狀態。正如預期的那樣,它表現出以下

C:\>git status 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  .gitignore 
#  Oracle/ 
nothing added to commit but untracked files present (use "git add" to track) 

現在,我做了git的添加* 預期上面的命令扔顯示正在添加的文件中有一些詳細的輸出和結束與命令輸出以下(尾下面顯示)

.... 
base_domain/servers/AdminServer/tmp/.appmergegen_1387484701373_liferay-portal-6. 
1.30-ee-ga3-20130812170130063.war/html/VAADIN/themes/runo/tree/tree.css. 
The file will have its original line endings in your working directory. 
warning: LF will be replaced by CRLF in Oracle/Middleware/user_projects/domains/ 
base_domain/servers/AdminServer/tmp/.appmergegen_1387484701373_liferay-portal-6. 
1.30-ee-ga3-20130812170130063.war/html/VAADIN/themes/runo/window/window.css. 
The file will have its original line endings in your working directory. 
fatal: unable to stat 'Oracle/Middleware/user_projects/domains/base_domain/serve 
rs/AdminServer/tmp/.appmergegen_1387484701373_liferay-portal-6.1.30-ee-ga3-20130 
812170130063.war/html/VAADIN/widgetsets/com.vaadin.portal.gwt.PortalDefaultWidge 
tSet/043D1FB3F694D0D6D3ACFB33DB80E43D.cache.html': Filename too long 

然後我發了git的狀態,以查看該文件被添加

C:\>git status 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  .gitignore 
#  Oracle/ 
nothing added to commit but untracked files present (use "git add" to track) 

像什麼事都沒有如此看來en補充說。 git文件夾太大了嗎?

我試過Bazaar和它的GUI控制凍結,每當我使用存儲庫。現在我正在嘗試Mercurial以查看它是否可以處理它。

+0

是否有一個原因,你在''C:\''中創建存儲庫,並忽略了一堆而不是直接在C:\ Oracle \''中創建存儲庫? – Chris

+0

確實。另外,我懷疑你真的想用Git來跟蹤tmp目錄。 –

+0

@Chris在c:\中只是爲了方便。如果我在c:\中啓動存儲庫,而不是在c:\ Oracle \ .git中初始化該存儲庫,它必須使壓縮整個c:\ Oracle目錄並根據需要發佈它,而不包括.git文件夾更容易。 – user6123723

回答

6

我嚴重懷疑你真的需要那個.../tmp/...的目錄。出現任何錯誤時,git add會失敗。如果在添加您指定的任何文件時出現問題,則不會添加任何內容。

我建議忽略tmp目錄:

echo tmp >> .gitignore 
git add . 

這將忽略項目中的所有tmp目錄。由於長文件名是在tmp目錄中的樣本輸出,通過忽略git add .應該工作目錄

echo path/to/AdminServer/tmp >> .gitignore 
git add . 

:如果你想忽略特定tmp目錄,你可以指定自己的完整路徑。

+0

我忽略了tmp目錄,我能夠將文件夾添加到git。幾件事情:我最初包含了tmp目錄,因爲我想捕獲應用程序服務器的整個狀態,我不確定這個特定的tmp目錄是否在這個意義上是重要的。但是現在因爲我沒有選擇,所以我忽略了它。但我很想知道GIT和Mercurial的文件名(大小)限制 – user6123723

+2

我不知道。但問題在於特定於Windows:我在Mac上創建了兩倍於您的路徑,Git對它沒有任何問題。 – janos

+1

在這個答案中真正的寶石是'git add'在遇到任何錯誤時失敗(如果來自操作的反饋讓用戶知道它是原子的話會很好) - upvote! – MandM

4

問題是Windows特有的:Git for Windows目前不使用Win32 API hack,將\\?\添加到路徑名以克服260個字符的標準路徑名長度限制,並且您的路徑名長度比限制長9個字符。

5

Cygwin來救援!通過Cygwin的Git運行相同的命令爲我工作。

8

重映射到這樣subst X: C:\<__relevant_lengthy_path__>\

較短驅動 -

我有一個類似遭遇這證實的Max Path length for Windows

予處理的方式的260炭限制是使用SUBST(替代)命令,將任何冗長的文件夾映射到單個驅動器,例如subst X: C:\<__relevant_lengthy_path__>\

但是在你的情況下,這是大不幸的是,你只有C:\ git inited這是不尋常的&勇敢:)