Tengo varios archivos en un sitio de CodeIgniter que querré tener en el repositorio pero no rastrear ningún cambio.
Por ejemplo, implemento una nueva instalación de este marco en un nuevo cliente, quiero que se descarguen los siguientes archivos (tienen los valores predeterminados CHANGEME) y solo tengo que hacer cambios específicos para este cliente (credenciales de la base de datos, información de la dirección de correo electrónico, CSS personalizado).
// the production config files i want the files but they need to be updated to specific client needs
application/config/production/config.php
application/config/production/database.php
application/config/production/tank_auth.php
// index page, defines the environment (production|development)
/index.php
// all of the css/js cache (keep the folder but not the contents)
/assets/cache/*
// production user based styling (color, fonts etc) needs to be updated specific to client needs
/assets/frontend/css/user/frontend-user.css
Actualmente si corro
git clone [email protected]:user123/myRepo.git httpdocs
y luego edita los archivos de arriba, todo es genial. Hasta que libero una revisión o parche y corro git pull
. Todos mis cambios se sobrescriben.
Respuestas:
git tiene una solución diferente para hacer esto. Primero cambie el archivo que no desea que se rastree y use el siguiente comando:
y si desea seguir los cambios nuevamente, use este comando:
documentación de git-update-index
fuente
--skip-worktree
opción es más adecuada para este trabajo que--assume-unchanged
.Para extraer una respuesta de los comentarios de otra respuesta:
$ git update-index --skip-worktree FILENAME
Parece ser una mejor opción que
--assume-unchanged
Puede leer más sobre esto aquí: Git: diferencia entre 'asumir-sin cambios' y 'omitir-árbol de trabajo'
fuente
Para mis proyectos de Code Igniter, mantengo database.php.example y config.php.example en el repositorio.
Luego agrego config.php y aplicaciones / config / database.php al archivo .gitignore .
Entonces, finalmente, cuando implemente, puedo copiar los archivos .example (a config.php y database.php), personalizarlos y GIT no los rastreará.
fuente
Los pondría en tu
.gitignore
archivo y los copiaría manualmente según sea necesario.Entonces el nombre de archivo esqueleto estaría en git, los nombres de archivo ignorados no estarían en git (pero estarían en .gitignore). De esta forma, cuando se realiza el paso manual para copiarlos a 'real' desde 'plantilla' (tal vez mejor nombre que esqueleto), se ignoran de inmediato.
fuente
git rm <file>
. El propósito es IE: un archivo config.php. Quiero mantener el archivo de configuración, pero obviamente no quiero rastrear las credenciales de la base de datos de cliente a cliente, ya que son diferentes.git add file1
y luego edítelo.gitignore
. El archivo comprometido permanecerá allí y no se actualizará. O bien: puede agregar el archivo.gitignore
y luego agregarlogit add --force file1
para forzar el archivo. Puede usar la segunda opción siempre que tenga que sobrescribir el archivoLas respuestas dadas están resolviendo el problema solo parcialmente, pero introduciendo aún más problemas.
Necesitaba preservar el archivo "Web.Local.config". La única solución que funcionó para mí fue:
1. Excluir el archivo del proyecto
2. Cree una copia separada del archivo como Web.LocalTemplate.config
Ahora que Git rastrea "Web.LocalTemplate.config", todos los desarrolladores pueden usarlo como punto de partida. Sin embargo, el "Web.Local.config", que no forma parte del proyecto, se ignorará automáticamente.
fuente
git update-index --skip-worktree FILENAME
solo resolver su problema parcialmente, o incluso agregar más problemas? Resuelve exactamente lo que estás tratando de hacer. ¿Lo intentaste?