У меня есть проект php, который использует composer для управления пакетами. Один из пакетов — это другой проект, принадлежащий тому же репо. У меня есть необходимость зафиксировать всю мою папку vendor, но я хочу игнорировать папку .git в подпроекте, чтобы она не рассматривалась как подмодуль.
До сих пор у меня не было успеха. Вещи, которые я уже пробовал:
продавец / .git
продавец / ** /. мерзавец /
поиск Гугл
поиск переполнения стека
Вот как выглядит папка подпроекта в GitLab. Вместо файлов это просто какая-то ссылка.
Для меня это выглядит как ошибка дизайна:
Если вы загружаете второй проект из того же репозитория, что и зависимость, этот проект следует переместить в другой репозиторий.
А также внутри В каталоге поставщиков поместите другой файл .gitignore с
# Ignore Git here
.git
# But not these files...
!.gitignore
Ты можешь использовать мерзавцы добиться того, что вы хотите. Думая из коробки, вы могли бы использовать перед фиксацией крюк переименовать .мерзавец каталог вашего включенного проекта, например. в «.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
Похоже, 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
Целиком 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"]
}
Документация твой друг
Git Документация сказал, что:
Ведущий
**
после косой черты означает совпадение во всех каталогах. Например,**/foo
соответствует файлу или каталогуfoo
везде, так же, как шаблонfoo
,**/foo/bar
соответствует файлу или каталогуbar
в любом месте, которое находится непосредственно в каталоге «foo».
Таким образом, вы можете попробовать следующий код, чтобы игнорировать .git
папка в подкаталогах:
**/.git/
Мне также интересно, почему вы собираетесь игнорировать папку, а не удалять ее.
Чтобы не рассматривать подпапку как подмодуль, удалите .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 репозиторий создан для ответа на этот вопрос.