wake-up-neo.net

Wie kann das äußere Repository und das eingebettete Repository als allgemeines/eigenständiges Repository funktionieren?

Ich habe ein großes Projekt (sagen wir A repo), und es gibt dort einen untergeordneten Ordner, der von B repo stammt. Ich würde folgende Warnung treffen, wenn ich mich von A repo begebe

warning: adding embedded git repository: extractor/annotator-server
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint:   git submodule add <url> extractor/annotator-server
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint:   git rm --cached extractor/annotator-server
hint:
hint: See "git help submodule" for more information.

Ich habe git-submodule und git-subtree gesehen:

Git-Repo in einem anderen Git-Repo beibehalten

https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree

Aber ich mag sie nicht, weil sie eine zusätzliche Konfiguration benötigen.


Was ich will, ist zum Beispiel:

struktur wie:

A/
--- a.py

--- B/
--- B/b.py

Wenn ich B/b.py ändere.

  1. Wenn ich mich auf Pfad A/ befinde, kann git addB/b.py geändert feststellen, git Push schreibt nur das A-Repo fest. 

    git add .   (would add changes under A/  )
    git Push   (would Push changes under A/  )
    git pull   (would pull changes under A/  )
    git clone XXX:A  (would clone all files under A/ ,    A/B/ is just looks like plain folder with all files, not a repo )
    
  2. Wenn ich mich im Pfad A/B/ befinde, füge git add nur B/b.py-Änderungen zu B-Repo hinzu, und git Push schreibt nur das zu B-Repo. 

    git add .   (would add changes under B/ , but not add changes to A repo)
    git Push   (would Push changes under B/ , but not Push changes to A repo)
    git pull   (would clone changes under B/ ,  )
    git clone XXX:B  (would clone all files under B/  )
    
  3. Wenn ich A und B auf einem anderen Rechner snycieren möchte, tun Sie dies einfach

    git clone A
    rm -rf A/B/
    git clone B ./B
    git add . && git commit 'sync with B'
    

In einem anderen Wort fungieren A und B als eigenständiges Repo.

Aber die Wahrheit ist, A Repo behandelt B Repo als Submodul: 

Ein Repo https://github.com/eromoe/test

B repo https://github.com/eromoe/test2


Wie erzwinge ich, dass A-Repo alle Dateien unter A/ und B-Repo alle Dateien unter A/B/ verfolgt? Ich möchte, dass A und B als eigenständige Repos fungieren, ohne dass eine andere Konfiguration erforderlich ist.

6
Mithril

Mit den folgenden Befehlen können Sie Dateien aus test2 repo zu test repo hinzufügen:

# In local test repo
rm -rf test2
git clone https://github.com/eromoe/test2
git add test2/
git commit -am 'add files from test2 repo to test repo'
git Push

Hinweis:  

Sie solltengit add test2/verwenden (mit Schrägstrich, nicht git add test2).

git add test2/ behandelt den test2-Ordner und seine Dateien als normale Ordner und Dateien für das Testrepo (Erstellungsmodus 100644). 

git add test2 behandelt den test2-Ordner als Submodul für Test-Repo (Erstellungsmodus 160000).

5

Wahrscheinlich erinnerte git an das Repository. Es hat mir geholfen:

 git rm --cached your_folder_with_repo 
 git commit -m "Gelöstes Repo entfernen" 
 git addiere deinen_Ordner_mit_repo /
 git commit -m "Ordner hinzufügen" 
 git Push 
0
rost shan

Wenn Sie sich nicht für die genaue Version von B A interessieren, können Sie Ihre aktuelle Einstellung (verschachtelte Git-Repos) beibehalten.

Sie werden die Warnung "Embedded Repo" erhalten, aber nebenbei verhalten sich beide Repos wie erwartet, wobei jedes Repository nur ihre Repos hinzufügt, bindet und pusht.
Hinweis: Sie können diese Warnung mit git config advice.addEmbeddedRepo kurzschließen/leeren.

0
VonC