Как относиться ко всем каталогам в каталоге Git как к обычным каталогам, включая .git/?

#git

Вопрос:

Я хочу инициализировать каталог в качестве репозитория git, но он содержит много .git/ каталогов. Git будет рассматривать их как подмодули. Это не то, чего я ожидал.

Например, я хочу создать config.git репозиторий, содержащий config.git/.vim/bundle/vim-airline/.git/ и т. Д..

Я все еще хочу сохранить .git/ каталоги в подкаталогах. Просто храните их такими, какие они есть.

Некоторые люди предлагают переименовывать или удалять .git/ каталоги. Это не то, чего я хочу.

Я пробовал submodule , subtree , rm -rf cache , update-index --assume-unchanged и т. Д. команды. Я нашел много статей в Интернете. Но ни один из них не работает так, как я ожидаю. Я не уверен, что что-то упустил.

Дополнение

Чтобы ответить на комментарий, почему я хочу это сделать. Я просто хочу, чтобы мой каталог конфигурации был проектом Git, чтобы я мог отслеживать все изменения и git push передавать их на сервер.

Мое окружение примерно такое:

 $ ls -al ~/config.git/

......
.screenrc
.ssh/
.vim/
.vimrc
.zshrc
bin/
......
......
 
 $ cd ~
$ ls -l .vimrc .vim .zshrc

.vimrc -> config.git/.vimrc
.vim -> config.git/.vim/
.zshrc -> config.git/.zshrc
 

Но есть много .git/ каталогов, таких как config.git/.vim/bundle/vim-airline/.git/ .

Когда я git push и git clone config.git т. Д. , Он не будет хранить эти файлы подмодулей.

Я также открыт для любых лучших решений.

Комментарии:

1. Вы хотите, чтобы git обрабатывал содержимое .git папок, как если бы они были обычными файлами? т. е. вносил в них изменения, имея возможность отменить некоторые из этих изменений…. Это меня удивляет. Может ли это быть meta.stackexchange.com/questions/66377/what-is-the-xy-problem

2. Это не то, чего я ожидал, но именно так работает Git. Можете ли вы объяснить конкретную цель, которую вы имеете в виду? То, что вы описываете, — это желаемое решение проблемы. Но вы, возможно, пытаетесь полностью решить неправильную проблему.

3. @Yunnosch извините, что я не совсем понимаю, что вы имеете в виду. Я просто хочу, чтобы они были нормальными файлами. фиксация изменений в них также является обычными файлами. Пока config.git это касается репо, они являются обычными файлами, такими как обычные текстовые файлы. Я не знаю, что еще я могу сказать, чтобы прояснить ситуацию. Извините, что я не носитель английского языка. config.git репо должно знать только об одном репо. Он не должен знать, что существуют какие-либо подмодули. Все остальные файлы являются обычными файлами, такими как foo.txt.

4. @DanielMann спасибо за ваш комментарий. Это точно так же, как в примере, который я привел. Я хочу использовать git для управления всеми файлами конфигурации. Некоторые каталоги конфигурации тоже являются модулем git, например: config.git/.vim/bundle/vim-airline/.git/ . В моей системе так оно и есть ln -s config.git/.vim/ ~/.vim . В прошлом я либо tar (архивирую) их, либо просто сохраняю их как обычные каталоги без git. Но это не идеальное решение. Я не могу вернуть некоторые файлы конфигурации к предыдущей версии. Поэтому я хочу, чтобы config.git был проектом git сейчас, и эта проблема пока не может быть решена. Я не хочу удалять ссылки. .git/

Ответ №1:

Это сложно, потому что Git запрещает это. Репозиторию Git не разрешается содержать другой репозиторий Git. Любой файл , имя которого содержит .git/ или /.git или /.git/ , в любом сочетании верхнего и/или нижнего регистра (так .giT/ или /.GIT/ включены), запрещен.

Это гарантирует, что клонировать .git репозиторий нормально, так что никаких злых вещей не произойдет, например, foo/.git/hooks/post-checkout из-за того, что он существует.

Комментарии:

1. просто любопытно : как вам удалось стать Мастером в git. Одно-два слова помогли бы и другим, таким как я(я понимаю, что опыт играет большую роль, но так ли это?). Даже ВонК восхищается вашим передовым уровнем знаний . У меня буквально была эта закладка в моем браузере.

2. @AsifKamranMalick: Я использую Git примерно с 2007 или 2008 года, и я потратил некоторое время на изучение систем управления версиями в целом.

3. // some time изучение систем управления версиями// Это скромный и искренний ответ. Спасибо за ваши слова. Вы определенно наблюдали за развитием систем контроля версий.