2010-07-24 17 views
13

Rails 3 projesine bazı Rakip 3 projelerineGit altmodülünden kurtulma

git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml 

ekledim, sadece bu dosyaların bir kısmını düzenlemeye çalıştığımda bu bir alt modüldüm. lib/generators/haml dizini. Şimdi her git status,

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

olsun ama git add lib/generators/haml'un bir etkisi yok. Ben sadece bir altmodule değil, dosyalara sahip olmak istiyorum, ama altmodülü bulmak imkansız olanı buluyorum:

> git rm --cached lib/generators/haml 
rm 'lib/generators/haml' 
> git status 

# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# deleted: lib/generators/haml 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# lib/generators/ 

> git commit -m "Removed submodule" 

[master 02ae4c7] Removed submodule 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 160000 lib/generators/haml 

> git status 

# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# lib/generators/ 
nothing added to commit but untracked files present (use "git add" to track) 

> git add lib/generators/haml 
> git status 

# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: lib/generators/haml 
# 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml 

> git commit -m "Re-added lib/generators/haml" 

[master c966912] Re-added lib/generators/haml 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 160000 lib/generators/haml 

> git status 

# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml 

Ek git add s işe yaramaz. Xzx101'i deneyebilirim,

fatal: git rm: 'lib/generators/haml': Operation not permitted 

olsun Sadece ölmeyecek! Ben how to delete submodules baktım, ama bu durumda, .submodules dosyası yok, .git/config'te alt modülden bahsediliyor. Yine de git submodule update'ü çalıştırırsam,

No submodule mapping found in .gitmodules for path 'lib/generators/haml' 

dizinini sildim ama aynı sonuçları elde ediyorum! Neler oluyor? Altmodülü silmek için .gitmodules dosyası oluşturmam gerekiyor mu?

cevap

6

, bunun (yani 'haml') aslında değil olduğunu mümkündür:

son git sürümü (1.7.1, sanırım) statüsünde bu bilgileri gösterir bir altmodül

git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml 

şu anlama gelir: İçinde git://github.com/psynix/rails3_haml_scaffold_generator.git ana dalı lib/generators/haml dizini, ve çıkış oluşturma. (lib olduğu) size yeni repo (lib/generators/haml) kökünden değil git status, ama yukarıdaki üç seviyeleri olabilir

gerçeği bir repo içinde repo klonlamak var demektir.

Hem Repo bağımsız olarak çalışabilir, ancak (hit SO question gibi) ana repo .gitignore için lib/generators/haml eklemek gerekir.

+0

Teşekkürler, '.gitignore' ekleyerek iyi bir fikirdi. –

+1

Ancak bu yeni dosyaları repo, FYI – andho

+0

içine itmiyor, benim sorun ilgisiz olduğu ortaya çıktı, ancak bu yardımcı oldu. –

6

Alt modül, programlanmamış dosyaları varsa değiştirilmiş hali durumunda gösterilir. Bu, bu alt modülde içinde kalan bazı izlenmeyen dosyaları demektir

diff --git a/lib/generators/haml b/lib/generators/haml 
index 3019fec..653c59a 160000 
--- a/lib/generators/haml 
+++ b/lib/generators/haml 
@@ -1 +1 @@ 
-Subproject commit 653c59ad72925c9ccbde67e8e484e15d4b6dd25d 
+Subproject commit 653c59ad72925c9ccbde67e8e484e15d4b6dd25d-dirty 

: Eğer git diff lib/generators/haml çağırmak dilerseniz en böyle bir şey görmek likeyl edeceğiz. Ana projedeki komutlar aracılığıyla eklenemezler; bunun yerine, sumbodule içine hareket etmeli ve bunları eklemelisiniz (veya .gitignore numarasına girişler eklemelisiniz) ... Ya da durum mesajını görmezden gelebilirsiniz. Hiçbir alt modül varsa

# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml (untracked content) 
+0

Tamam, sanırım anlıyorum: 'lib/generators/haml' içine gitmeli ve orada bir şeyi değiştirdiğimde gitmem gereken şeyleri yapmalıyım. Önerdiğiniz gibi, gidip 1.7.0.5'ten 1.7.2'ye güncelledim ve bu bana daha yararlı bir mesaj veriyor. Yine de aklıma, '.git' dizini ile lib/jeneratörler/haml'along'u uçurduktan sonra bile bir altmodülün var olduğunu düşündüğüm aklımı uçuruyor. –

0

Sen kullanmış olabilir:

git add lib/generators/haml/ 

HEAD için alt modülün dosya eklemek ve alt modülünü çıkarmak için.Ama sonra yine işe yaramayabilir çünkü gerçekten bir alt modülünüz yok.

Yoldan sonra arkada eğik çizgi olduğunu unutmayın. Sadece git Altmodüllerin içinde altmodülün dan teslim edilmesi için taahhüt değişecek

git add lib/generators/haml 

: Bu git submodule kaldırır ve aksine HEAD içine koyar koyarsanız.