Tengo la siguiente estructura de directory:
./ ├── proj-1 │ ├── README.md │ ├── src/ │ └── test/ └── proj-2 ├── README.md ├── src/ └── test/
¿Cómo puedo ignorar todo excepto los src/
directorys usando solo un file .gitignore
en el directory raíz?
He intentado:
* !.gitignore !/*/src/ !/*/src/*
Pero eso no parece recoger los directorys que quiero después de ejecutar el git status
.
¿Algun consejo?
Debe ignorar recursivamente todos los directorys principales del tree de directorys src
y luego ignorar su contenido:
# Ignore everything * # Unignore .gitignore !.gitignore # Unignore all directories !*/ # Ignore contents of all directories */* # Unignore all src subdirectories !*/src/ # Unignore directory tree under src subdirectories !*/src/**
Entonces, para un tree que se parece
. ├── proj-1 │ ├── README.md │ ├── src │ │ ├── srcfile1 │ │ ├── srcfile2 │ │ ├── srcfile3 │ │ └── subsrc │ │ ├── subsrcfile1 │ │ ├── subsrcfile2 │ │ └── subsrcfile3 │ └── test │ ├── testfile1 │ ├── testfile2 │ └── testfile3 ├── proj-2 │ ├── README.md │ ├── src │ │ ├── srcfile1 │ │ ├── srcfile2 │ │ └── srcfile3 │ └── test │ ├── testfile1 │ ├── testfile2 │ └── testfile3 └── proj-3 └── file
obtienes este estado
On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore proj-1/ proj-2/ nothing added to commit but untracked files present (use "git add" to track)
y después de agregar todo, obtienes
$ git add * .gitignore $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitignore new file: proj-1/src/srcfile1 new file: proj-1/src/srcfile2 new file: proj-1/src/srcfile3 new file: proj-1/src/subsrc/subsrcfile1 new file: proj-1/src/subsrc/subsrcfile2 new file: proj-1/src/subsrc/subsrcfile3 new file: proj-2/src/srcfile1 new file: proj-2/src/srcfile2 new file: proj-2/src/srcfile3
.gitignore
tiene que agregarse explícitamente porque el shell no se expande *
para include files ocultos.