パッケージ管理にcomposerを使用するphpプロジェクトがあります。パッケージの1つは、同じリポジトリに属する別のプロジェクトです。ベンダーフォルダー全体をコミットする必要がありますが、無視したいです。サブプロジェクトの.gitフォルダー。これにより、サブモジュールのように扱われなくなります。
これまでのところ、私は成功していません。私がすでに試したこと:
ベンダー/.git
ベンダー/**/.git/
google検索
スタックオーバーフロー検索
GitLabでのサブプロジェクトフォルダーは次のようになります。ファイルの代わりに、それは単なる参照のようなものです。
git hooksを使用して、目的を達成できます。箱から出して考えると、pre-commitフックを使用して、インクルードされたプロジェクトの。gitディレクトリの名前を変更できます。 「.git2」に、「。git2」ディレクトリを除く後者のプロジェクトのすべてのファイルを追加し、すべてをコミットしてプッシュし、最後にpost-commit hookを使用して「.git2」フォルダの名前を「」に戻します。モジュール内の.git "。
1)。git/hooks /の下にpre-commitファイルを作成しますrootリポジトリの内容:
#!/bin/sh
mv "vendor/modulename/.git" "vendor/modulename/.git2"
git rm --cached vendor/modulename
git add vendor/modulename/*
git reset vendor/modulename/.git2
2)。git/hooks /の下にpost-commitファイルを作成します。
#!/bin/sh
mv "vendor/modulename/.git2" "vendor/modulename/.git"
3)リポジトリ内のファイルを変更し、最後に:
git commit -a -m "Commit msg"
git Push
私にとって、これは設計エラーのように見えます。
依存関係と同じリポジトリから2番目のプロジェクトをロードする場合、このプロジェクトは別のリポジトリに移動する必要があります。
そしてinsideベンダーディレクトリは別の.gitignoreファイルを
# Ignore Git here
.git
# But not these files...
!.gitignore
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
.git
サブディレクトリだけでなく、vendor
フォルダ全体を無視する必要があります。使用されるパッケージは、バージョン管理にチェックインするものであるcomposer.json
とcomposer.lock
に保存されます。
参照: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
プロジェクトの一部として再利用可能なパッケージを作成する場合は、次の2つのオプションがあります。
composer.json
..に追加.
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
packages
ディレクトリを作成し、それを自動ロードパスに追加できます。これにより、すべてのコードに単一のGitリポジトリを使用できるようになります(2つのリポジトリを使用する場合は、Gitサブモジュールを使用できます)
composer.json
..に追加.
"autoload": {
"classmap": ["packages"]
}