Git ignoriert den .git-Ordner

Lesezeit: 6 Minuten

Git ignoriert den git Ordner
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.

Geben Sie hier die Bildbeschreibung ein

  • 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

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

  • Danke dafür! Umbenennen der .git dir scheint die einzig gültige Lösung zu sein. Es wäre so viel einfacher, wenn Git das Hinzufügen erlauben würde .git/ zu .gitignore damit verschachtelte Repos funktionieren …

    – Rotareti

    10. Dezember 2018 um 14:29 Uhr


Git ignoriert den git Ordner
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

  • Hmm. Wenn ich wie gewohnt committe und pushe, wird das Unterprojekt im Repo als Referenz angezeigt, während andere Pakete (von Packagist) als Dateien angezeigt werden. Wenn ich jedoch das .git-Verzeichnis vor dem Festschreiben manuell aus meinem Unterprojekt lösche, werden alle Dateien wie erwartet angezeigt. Vielleicht gibt es einen besseren Weg, als zu versuchen, das .git-Verzeichnis zu ignorieren?

    – blauer Mondballon

    5. Januar 2016 um 19:47 Uhr


  • Eigentlich sieht die Idee, den Git-Ordner zu ignorieren, falsch aus. Sollte auf jeden Fall anders sein. Ich habe Commit mit den von Ihnen beschriebenen Bedingungen versucht – alles funktioniert richtig. Es gibt keine Referenzen im Commit. Vielleicht sind Ihre Pakete tatsächlich Softlinks in Ihrem Dateisystem?

    – Jewgenij Schtschemelev

    6. Januar 2016 um 7:29 Uhr

  • @YevgeniyShchemelev versuchen Sie Ihren Test, wenn die .git Unterverzeichnis enthält Informationen für ein gefülltes Git-Repo.

    – Benutzer151841

    30. Januar 2018 um 18:47 Uhr

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

  • Das geht nicht mit git 2.19.2 auf meiner Maschine. Git beschwert sich immer noch über Subrepos, wenn ich laufe git add -A im übergeordneten Repo.

    – Rotareti

    10. Dezember 2018 um 14:32 Uhr


1647209888 817 Git ignoriert den git Ordner
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"]
}

1647209888 365 Git ignoriert den git Ordner
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.

999170cookie-checkGit ignoriert den .git-Ordner

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy