
Blaumondballon
Ich habe ein PHP-Projekt, das Composer für die Paketverwaltung verwendet. Eines der Pakete ist ein anderes Projekt, das zum selben Repo gehört. Ich muss meinen gesamten Vendor-Ordner festschreiben, aber ich möchte den .git-Ordner im Unterprojekt ignorieren, damit er nicht wie ein Untermodul behandelt wird.
Bisher hatte ich keinen Erfolg. Dinge, die ich bereits ausprobiert habe:
Anbieter/.git
Anbieter/**/.git/
Google-Suche
Stapelüberlaufsuche
So sieht der Unterprojektordner in GitLab aus. Anstelle der Dateien ist es nur eine Art Referenz.

Sie können verwenden Git-Haken um zu erreichen, was Sie wollen. Out of the box denken, könnten Sie verwenden vorab verpflichten Haken zum Umbenennen der .git Verzeichnis Ihres inkludierten Projekts, zB. zu “.git2”, fügen Sie alle Dateien im letzteren Projekt außer dem “.git2”-Verzeichnis hinzu, übertragen Sie alle, pushen Sie sie und verwenden Sie sie schließlich Post-Commit-Hook um den Ordner “.git2” in Ihrem Modul wieder in “.git” umzubenennen.
1) Erstellen vorab verpflichten Datei unter .git/hooks/ von dir Wurzel Repo mit Inhalt:
#!/bin/sh
mv "vendor/modulename/.git" "vendor/modulename/.git2"
git rm --cached vendor/modulename
git add vendor/modulename/*
git reset vendor/modulename/.git2
2) Erstellen post-commit Datei unter .git/hooks/ auch mit Inhalt:
#!/bin/sh
mv "vendor/modulename/.git2" "vendor/modulename/.git"
3) Ändern Sie eine Datei in Ihrem Repo und schließlich:
git commit -a -m "Commit msg"
git push

Jewgenij Schtschemelev
Es sieht so aus, als würde Git automatisch .git-Ordner in Unterordnern des Root-Repositorys ignorieren.
(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
Für mich sieht das nach einem Konstruktionsfehler aus:
Wenn Sie ein zweites Projekt aus demselben Repository als Abhängigkeit laden, sollte dieses Projekt in ein anderes Repository verschoben werden.
Und Innerhalb Legen Sie im Vendor-Verzeichnis eine weitere .gitignore-Datei mit an
# Ignore Git here
.git
# But not these files...
!.gitignore

Erik Berkun-Drevnig
Das ganze vendor
Ordner sollte ignoriert werden, nicht nur die .git
Unterverzeichnisse. Welche Pakete verwendet werden, ist in hinterlegt composer.json
und composer.lock
die Sie in die Versionskontrolle einchecken.
Sehen: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
Wenn Sie im Rahmen Ihres Projekts ein wiederverwendbares Paket erstellen möchten, haben Sie zwei Möglichkeiten:
A) Verwenden Sie Composer, um ein anderes Repo zu handhaben
Hinzufügen composer.json
…
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
B) Verwenden Sie ein zweites Paketverzeichnis
Sie können eine erstellen packages
Verzeichnis und fügen Sie es Ihren Autoload-Pfads hinzu. Dadurch können Sie ein einziges Git-Repo für den gesamten Code verwenden (wenn Sie zwei Repos verwenden möchten, können Sie ein Git-Submodul verwenden).
Hinzufügen composer.json
…
"autoload": {
"classmap": ["packages"]
}

Travor Liu
Um den Unterordner nicht als Untermodul zu behandeln, löschen Sie die .git
Mappe. Damit Sie keinen Ordner mit sehen @number
auf der Webseite. Wenn Sie das Submodul aktualisieren möchten. Sie können ein Skript wie das folgende schreiben 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"
Ich glaube, das ist der beste Weg, um zu vermeiden @number
im GitLab
Sie können meine verweisen GitHub-Repository erstellt, um diese Frage zu beantworten.
9991700cookie-checkGit ignoriert den .git-Ordneryes
stackoverflow.com/questions/3240881/…
– Jewgenij Schtschemelev
5. Januar 2016 um 18:42 Uhr
Das wäre großartig, außer dass ich keines der Pakete als Submodule verwende. Genau das versuche ich eigentlich zu vermeiden.
– blauer Mondballon
5. Januar 2016 um 18:47 Uhr
wie wäre es einfach
.git
in.gitignore
– Anand S
5. Januar 2016 um 20:15 Uhr
Das könnte funktionieren, aber es würde jedes .git-Verzeichnis ignorieren. Ich möchte .git für nur ein bestimmtes Verzeichnis ignorieren.
– blauer Mondballon
5. Januar 2016 um 20:36 Uhr
*.git sollte funktionieren!
– Mythischer Coder
21. März 2017 um 11:48 Uhr