Git игнорировать папку .git

У меня есть проект php, который использует composer для управления пакетами. Один из пакетов — это другой проект, принадлежащий тому же репо. У меня есть необходимость зафиксировать всю мою папку vendor, но я хочу игнорировать папку .git в подпроекте, чтобы она не рассматривалась как подмодуль.

До сих пор у меня не было успеха. Вещи, которые я уже пробовал:

продавец / .git

продавец / ** /. мерзавец /

поиск Гугл

поиск переполнения стека


Вот как выглядит папка подпроекта в GitLab. Вместо файлов это просто какая-то ссылка.

введите описание изображения здесь

9

Решение

Для меня это выглядит как ошибка дизайна:

Если вы загружаете второй проект из того же репозитория, что и зависимость, этот проект следует переместить в другой репозиторий.

А также внутри В каталоге поставщиков поместите другой файл .gitignore с

# Ignore Git here
.git

# But not these files...
!.gitignore
2

Другие решения

Ты можешь использовать мерзавцы добиться того, что вы хотите. Думая из коробки, вы могли бы использовать перед фиксацией крюк переименовать .мерзавец каталог вашего включенного проекта, например. в «.git2» добавьте все файлы в последнем проекте, кроме каталога «.git2», зафиксируйте все, отправьте его и, наконец, используйте крюк после фиксации переименовать папку «.git2» обратно в «.git» в вашем модуле.

1) Создать перед фиксацией файл под .мерзавец / Крючки / вашей корень репо с содержанием:

#!/bin/sh
mv "vendor/modulename/.git" "vendor/modulename/.git2"
git rm --cached vendor/modulename
git add vendor/modulename/*
git reset vendor/modulename/.git2

2) Создать после совершения файл под .мерзавец / Крючки / также с содержанием:

#!/bin/sh
mv "vendor/modulename/.git2" "vendor/modulename/.git"

3) Измените файл в своем репо и, наконец,:

git commit -a -m "Commit msg"git push
2

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

(master)[/tmp]
$ mkdir test_root
(master)[/tmp]
$ git init test_root
Initialized empty Git repository in /tmp/test_root/.git/
(master)[/tmp]
$ cd test
test/      test_root/
(master)[/tmp]
$ cd test_root/
(master)[/tmp/test_root]  (master)
$ ls
(master)[/tmp/test_root]  (master)
$ git init test_child
Initialized empty Git repository in /tmp/test_root/test_child/.git/
(master)[/tmp/test_root]  (master)
$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)
(master)[/tmp/test_root]  (master)
$ touch test_root_file
(master)[/tmp/test_root]  (master)
$ cd test_child/
(master)[/tmp/test_root/test_child]  (master)
$ ls
(master)[/tmp/test_root/test_child]  (master)
$ touch test_child_file
(master)[/tmp/test_root/test_child]  (master)
$ cd ..
(master)[/tmp/test_root]  (master)
$ git status
On branch master

Initial commit

Untracked files:
(use "git add <file>..." to include in what will be committed)

test_child/
test_root_file

nothing added to commit but untracked files present (use "git add" to track)
(master)[/tmp/test_root]  (master)
$ git add test_child/test_child_file
(master)[/tmp/test_root]  (master)
$ git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file:   test_child/test_child_file

Untracked files:
(use "git add <file>..." to include in what will be committed)

test_root_file

(master)[/tmp/test_root]  (master)
$ cd test_child/
(master)[/tmp/test_root/test_child]  (master)
$ git status
On branch master

Initial commit

Untracked files:
(use "git add <file>..." to include in what will be committed)

test_child_file

nothing added to commit but untracked files present (use "git add" to track)
(master)[/tmp/test_root/test_child]  (master)
$ git --version
git version 1.9.1
$ git add test_root_file
(master)[/tmp/test_root]  (master)
$ git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file:   test_child/test_child_file
new file:   test_root_file

(master)[/tmp/test_root]  (master)
$ git commit -m'1 commit'
[master (root-commit) 4d4b695] 1 commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test_child/test_child_file
create mode 100644 test_root_file
(master)[/tmp/test_root]  (master)
$ git show
commit 4d4b69589bf4f471c3c784f95f447d2a40ee6d7d
Author: Evgenii Shchemelev
Date:   Wed Jan 6 09:20:03 2016 +0200

1 commit

diff --git a/test_child/test_child_file b/test_child/test_child_file
new file mode 100644
index 0000000..e69de29
diff --git a/test_root_file b/test_root_file
new file mode 100644
index 0000000..e69de29
1

Целиком vendor папка должна игнорироваться, а не только .git подкаталоги. Какие пакеты используются, хранятся в composer.json а также composer.lock что вы проверяете в управлении версиями.

Увидеть: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

Если вы хотите создать повторно используемый пакет как часть вашего проекта, у вас есть два варианта:

добавить в composer.json

{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"}
}

Вы можете создать packages каталог и добавить его в ваши пути автозагрузки. Это позволит вам использовать один репозиторий Git для всего кода (если вы хотите использовать два репозитория, вы можете использовать субмодуль Git)

добавить в composer.json

"autoload": {
"classmap": ["packages"]
}
0

Документация твой друг

Git Документация сказал, что:

Ведущий ** после косой черты означает совпадение во всех каталогах. Например, **/foo соответствует файлу или каталогу foo везде, так же, как шаблон foo, **/foo/bar соответствует файлу или каталогу bar в любом месте, которое находится непосредственно в каталоге «foo».

Таким образом, вы можете попробовать следующий код, чтобы игнорировать .git папка в подкаталогах:

**/.git/

Мне также интересно, почему вы собираетесь игнорировать папку, а не удалять ее.

-1

Чтобы не рассматривать подпапку как подмодуль, удалите .git папка. Так что вы не увидите папку с @number на сайте. Если вы хотите обновить субмодуль. Вы можете создать скрипт, подобный следующему написанному в Shell

update.sh

git clone <url> <subfolder that you won't treat it as a module>
rm -rf <subfolder>/.git/
git add <subfolder>
git commit -m "Updated module"

update.bat

git clone <url> <subfolder>
rmdir /s /q <subfolder>\.git
git add <subfolder>
git commit -m "Updated module"

Я считаю, что это лучший способ избежать @number в GitLab

Вы можете отослать мой GitHub репозиторий создан для ответа на этот вопрос.

-1
По вопросам рекламы [email protected]