web-dev-qa-db-ja.com

Gitは.gitフォルダーを無視します

パッケージ管理にcomposerを使用するphpプロジェクトがあります。パッケージの1つは、同じリポジトリに属する​​別のプロジェクトです。ベンダーフォルダー全体をコミットする必要がありますが、無視したいです。サブプロジェクトの.gitフォルダー。これにより、サブモジュールのように扱われなくなります。

これまでのところ、私は成功していません。私がすでに試したこと:

ベンダー/.git

ベンダー/**/.git/

google検索

スタックオーバーフロー検索


GitLabでのサブプロジェクトフォルダーは次のようになります。ファイルの代わりに、それは単なる参照のようなものです。

enter image description here

11
bluemoonballoon

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
3
Jannes Botis

私にとって、これは設計エラーのように見えます。

依存関係と同じリポジトリから2番目のプロジェクトをロードする場合、このプロジェクトは別のリポジトリに移動する必要があります。

そしてinsideベンダーディレクトリは別の.gitignoreファイルを

# Ignore Git here
.git

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

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

.gitサブディレクトリだけでなく、vendorフォルダ全体を無視する必要があります。使用されるパッケージは、バージョン管理にチェックインするものであるcomposer.jsoncomposer.lockに保存されます。

参照: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

プロジェクトの一部として再利用可能なパッケージを作成する場合は、次の2つのオプションがあります。

A)Composerを使用して、別のリポジトリを処理します

composer.json ..に追加.

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

B)2番目のパッケージディレクトリを使用する

packagesディレクトリを作成し、それを自動ロードパスに追加できます。これにより、すべてのコードに単一のGitリポジトリを使用できるようになります(2つのリポジトリを使用する場合は、Gitサブモジュールを使用できます)

composer.json ..に追加.

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