Voglio usare git per mantenere un record cronologico delle dipendenze reali che un'applicazione ha utilizzato nel tempo, con maggiore fedeltà di quella che posso ottenere dal gestore pacchetti.Git - Come posso schiacciare le modifiche ai file ignorati senza perdere queste modifiche?
Sto usando questi rami:
- maestro: solo il codice sorgente. dipendenze in
.gitignore
- costruzione: il codice sorgente e le dipendenze
- build-$ TIMESTAMP: ramo temporaneo utilizzato per forzare l'inserimento di un file ignorati
E questo script, build-release.sh
:
DEV_MODULES="mocha chai bower coffeelint"
BUILT_FILES="node_modules build"
DATE=$(date)
TIMESTAMP=$(date +"%s")
BRANCH=$(git rev-parse --abbrev-ref HEAD)
# create a temporary branch with the current dependencies and binaries
npm uninstall $DEV_MODULES
git checkout -b build-$TIMESTAMP
git add --all --force $BUILT_FILES
git commit -m "copy $BUILT_FILES from $BRANCH"
# merge the temporary branch into the build branch
git branch build || echo "build branch already exists"
git checkout build --force
git merge build-$TIMESTAMP --strategy=subtree -m "Build as of $DATE"
git branch -D build-$TIMESTAMP
# restore the original branch
git checkout $BRANCH
git checkout build -- $BUILT_FILES
git rm -r --cached $BUILT_FILES
Quali opere e mi fornisce un'utile vista delle modifiche all'origine, alle dipendenze e ai binari da una versione all'altra:
Tuttavia, il commit richiede il doppio di quanto necessario. Voglio che l'albero a guardare come questo:
Come posso combinare i "file costruite copia" impegnano con il "costruire come di" impegnarsi?
Quando provo a git merge --squash
, finisce con lo stato che era sul build
invece dello stato che era su build-$TIMESTAMP
, che non è corretto (voglio importare le modifiche ai file ignorati, ma si fondono sembra non avere la lingua di Fai questo). Quando provo a git rebase --onto build build-$TIMESTAMP
perdo la parentela del nuovo commit.
voglio solo registrare i file esatto che ricevo sul ramo build-$TIMESTAMP
, ma con entrambe le build
e master
rami come genitori, poi puntare il ramo build
a quel commit.
Perché esattamente si desidera eseguire il commit di file ignorati? Se vuoi semplicemente tenere traccia delle dipendenze storiche, perché non limitarti a documentarlo in un file creato manualmente? – Julian
Vorrei anche raggruppare le dipendenze esatte che hanno superato i test e trasmetterli alla produzione, senza presupporre che tutti i server di produzione saranno in grado di installarli in modo identico. Usare git per trasmettere delta è sembrato un buon modo per ottenerlo e ottenere anche il change-tracking. – Phssthpok
https://www.npmjs.org/doc/cli/npm-prune.html usa 'npm prune --production' per rimuovere devDependencies;) – soyuka