git/list[1] front-page[2] threads[3] people[4] search[5] about
 

GIT cloning(or pull/push) doesn't work properly if you have a sub-folder as its own GIT repo

From
SHSiddique Hameed <siddii@gmail.com>
Date
Apr 23, 2011, 17:04 UTC
Message-ID
<BANLkTi=YsEr9hOz7-u_t3BJUiMt+34P+ZA@mail.gmail.com>

I don't want to categorize this as bug until I hear expert panel's opinion. Spare me if its a known issue or if I am doing something silly :) I did enough research online and couldn't find a good answer.

Here it goes..

Let's say if I have a folder called "ParentGITRepo" which is a local GIT repo. I have sub folders called "Child1Repo" and "Child2" with some files on it. For some reason, whether accidentally or deliberately, I make "Child1Repo" a GIT repo on its own. GIT recognizes ParentGITRepo & Child1Repo as separate GIT repositories. But, if I clone "ParentGITRepo" into somewhere else, I am missing everything from Child1Repo. The worse thing is, even if I cleanup "Child1Repo" by removing it's .git folder, the parent GIT repo is ignoring any activity I do in that folder.

I think, the right way to do this setup is probably using git sub modules or something. But given this scenario, what is the expected behaviour? Am i missing? It would really make more sense if you can go thro the following steps (test cases) outlined below.

# Setting up ParentGITRepo & Child1Repo and Child2
$ cd ~
$ mkdir ParentGITRepo
$ cd ParentGITRepo/
$ git init .
$ mkdir Child1Repo
$ mkdir Child2
$ cd Child1Repo/
$ git init .
$ echo "Child1RepoFile" > Child1RepoFile.txt
$ git add .
$ git commit -a -m "Adding Child1Repo content"
[master (root-commit) 01ccc52] Adding Child1Repo content
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 Child1RepoFile.txt
$ cd ../Child2/
$ echo "Child2 file content" > Child2File.txt
$ cd ..
$ echo "Parentfile" > ParentFile.txt
$ git add .
$ git commit -a -m "Adding Parent content"
[master (root-commit) b31d0a5] Adding Parent content
 3 files changed, 3 insertions(+), 0 deletions(-)
 create mode 160000 Child1Repo
 create mode 100644 Child2/Child2File.txt
 create mode 100644 ParentFile.txt
---------------------------------------
 # Now verify ParentGITRepo & Child1Repo working independently
$ cd ~/ParentGITRepo/
$ git log
commit b31d0a5aef19c6b119d89718f560905ad0f34aa7
Author: Siddique Hameed <siddii+git@gmail.com>
Date:   Fri Apr 22 11:25:15 2011 -0500
   Adding Parent content
$ cd ~/ParentGITRepo/Child1Repo/
$ git log
commit 01ccc52931f8b40f6d92b29769300a254d8dd411
Author: Siddique Hameed <siddii+git@gmail.com>
Date:   Fri Apr 22 11:22:00 2011 -0500
   Adding Child1Repo content
--------------------------------------------

# Now try cloning ParentGITRepo & verify the contents inside it $ cd ~ $ git clone ParentGITRepo/ ParentGITRepoClone/ Cloning into ParentGITRepoClone... done. $ cd ParentGITRepoClone/ $ ls -a ./ ../ .git/ Child1Repo/ Child2/ ParentFile.txt

$ cd Child1Repo/ $ ls -a ./ ../

$ git log
commit b31d0a5aef19c6b119d89718f560905ad0f34aa7
Author: Siddique Hameed <siddii+git@gmail.com>
Date:   Fri Apr 22 11:25:15 2011 -0500
   Adding Parent content
--------------------------------------------

As you can see there is nothing in Child1Repo after its was cloned. I also tried the reverse of this. Like, having a child folder as GIT repo and make a ParentFolder a repo on its own & clone the parent folder and the cloned folder doesnt contain anything from child repo.

Let me know if you have more questions.
Thanks,
Siddique
Next: Chris Packham
Message 1 of 5 in “GIT cloning(or pull/push) doesn't work properly if you have a sub-folder as its own GIT repo”
  1. Siddique HameedApr 23, 2011
  2. Chris PackhamApr 24, 2011
  3. Off-topic Thunderbird wrapping (was Re: GIT cloning(or pull/push) doesn't work properly if you have a sub-folder as its own GIT repo)Chris Packham, Apr 24, 2011
  4. Tor ArntsenApr 24, 2011
  5. Siddique HameedApr 25, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.