Error: No se puede acceder al archivo jar bfg.jar – BFG

5 minutos de lectura

Avatar de usuario de HolyMoly
santomoly

Así que cometí por error mi secrets.yml en confirmaciones anteriores (¡ay!) y quiero limpiar mi historial de confirmaciones de git. Parece que la forma más sencilla en ayunas es usar BFG. Descargué el archivo jar e instalé Java, se requiere, y creé un espejo de mi repositorio, pero cuando ejecuto el comando según los documentos:

java -jar bfg.jar --delete-files secrets.yml my-repo.git

me sale el error Unable to access jarfile bfg.jar

Los documentos son bastante bonitos, pero no especifican si hay algo que debería haber hecho para instalar esto o ponerlo en funcionamiento, o vincularlo a mi repositorio espejo, y estoy bastante confundido. Vi un tutorial de youtube que dice que debo crear un enlace simbólico usando un comando como;

ln -s ~/bfg-1.11.6.jar /usr/local/bin/bfg

para ejecutar el bfg, excepto que no estoy seguro de a qué se refiere la segunda parte de ese comando ( /usr/local/bin/bfg ) o hacia dónde debería estar apuntando en mi caso, ya que eso no funciona para mí tal como está. Tengo el archivo jar guardado en mi directorio raíz de usuario. ¿Necesito moverlo? ¿Cómo ejecuto BFG en mi repositorio espejo? ¿Debería hacerlo? adentro ¿El directorio de mi aplicación espejo cuando la ejecuto? ¿O la ejecuto desde fuera de la aplicación?

  • dar la ruta completa al archivo .jar es la forma segura de hacerlo.

    – señor

    17 de mayo de 2022 a las 9:19

Avatar de usuario de VonC
VonC

2015: De la documentacióndebería ser:

java -jar bfg.jar <options> yourrepo

Pruebe y use la ruta completa del jar si tiene un error como “Unable to access jarfile bfg.jar“: /home/user/path/to/bfg.jar.

Si los jars están configurados para ejecutarse con Javaentonces /usr/local/bin/bfg sería la ruta del enlace simbólico que hace referencia al contenedor bfg correcto.

La alternativa se describe en “Eliminar datos confidenciales

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch Rakefile' \
--prune-empty --tag-name-filter cat -- --all

O (actualización de noviembre de 2017), como comentó JeremyDouglass,

Si usted descargar lo último (por ejemplo, de 1.12.16el bfg-1.12.6.jar) y solo desea usar comandos estándar en un directorio de ensayo local únicamente (sin ruta, sin enlace simbólico), entonces simplemente puede cambiar el nombre del contenedor:

mv bfg-1.12.16.jar bfg.jar 
java -jar bfg.jar --delete-files bad.txt repo.git

2019-2020: más recientemente, ahora usaría Debería usar git filter-repo (que mencioné aquí).

instalarlo primero. (python3 -m pip install --user git-filter-repo)

Luego, usando un filtro basado en ruta:

git filter-repo --path secrets.yml --invert-paths HEAD

HEAD significa que cambiará solo las confirmaciones de rama actuales.
Elimina HEAD y revisará todas tus confirmaciones en todas tus ramas.

  • Gracias VonC, finalmente lo abandoné y lo hice con git filter-branch según los documentos de git, debería haber probado la ruta completa, y hubiera sido genial si hubieran cubierto un poco los errores en los documentos, pero así es la vida. Hice el trabajo de todos modos, ¡pero probaré la ruta completa la próxima vez que intente usar bfg! gracias de nuevo 😉

    – Holy Moly

    7 sep 2015 a las 18:46


  • @HolyMoly Me alegro de que hayas hecho que funcione. He editado la respuesta para incluir el git filter-branch alternativa.

    – VoC

    7 sep 2015 a las 20:08

  • Si descarga la última versión (p. ej. bfg-1.11.6.jar) y solo desea usar comandos estándar en un directorio de ensayo local únicamente (sin ruta, sin enlace simbólico), entonces simplemente puede cambiar el nombre del contenedor: mv bfg-1.11.6.jar bfg.jar entonces java -jar bfg.jar --delete-files bad.txt repo.git.

    – Jeremy Douglas

    1 de noviembre de 2017 a las 8:13

  • @JeremyDouglas Gracias. He incluido tu comentario en la respuesta para mayor visibilidad. Y usé 1.12.16 como último;)

    – VoC

    1 de noviembre de 2017 a las 8:22

  • @Leonif Luego, vaya a la carpeta donde lo descargó, y el comando mv funcionará.

    – VoC

    13 de febrero de 2020 a las 9:28

Avatar de usuario de Pradeep Kachhawaha
Pradeep Kachhawaha

Una vez que haya instalado BFG (por ejemplo, usando brew install BFG), puede llamar al comando BFG en la terminal.
Aquí está la ayuda de la línea de comandos para BFG:

bfg
bfg 1.13.0
Usage: bfg [options] [<repo>]

  -b, --strip-blobs-bigger-than <size>
                           strip blobs bigger than X (eg '128K', '1M', etc)
  -B, --strip-biggest-blobs NUM
                           strip the top NUM biggest blobs
  -bi, --strip-blobs-with-ids <blob-ids-file>
                           strip blobs with the specified Git object ids
  -D, --delete-files <glob>
                           delete files with the specified names (eg '*.class', '*.{txt,log}' - matches on file name, not path within repo)
  --delete-folders <glob>  delete folders with the specified names (eg '.svn', '*-tmp' - matches on folder name, not path within repo)
  --convert-to-git-lfs <value>
                           extract files with the specified names (eg '*.zip' or '*.mp4') into Git LFS
  -rt, --replace-text <expressions-file>
                           filter content of files, replacing matched text. Match expressions should be listed in the file, one expression per line - by default, each expression is treated as a literal, but 'regex:' & 'glob:' prefixes are supported, with '==>' to specify a replacement string other than the default of '***REMOVED***'.
  -fi, --filter-content-including <glob>
                           do file-content filtering on files that match the specified expression (eg '*.{txt,properties}')
  -fe, --filter-content-excluding <glob>
                           don't do file-content filtering on files that match the specified expression (eg '*.{xml,pdf}')
  -fs, --filter-content-size-threshold <size>
                           only do file-content filtering on files smaller than <size> (default is 1048576 bytes)
  -p, --protect-blobs-from <refs>
                           protect blobs that appear in the most recent versions of the specified refs (default is 'HEAD')
  --no-blob-protection     allow the BFG to modify even your *latest* commit. Not recommended: you should have already ensured your latest commit is clean.
  --private                treat this repo-rewrite as removing private data (for example: omit old commit ids from commit messages)
  --massive-non-file-objects-sized-up-to <size>
                           increase memory usage to handle over-size Commits, Tags, and Trees that are up to X in size (eg '10M')
  <repo>                   file path for Git repository to clean

Para mí, el jar bfg tenía una versión en su nombre (bfg-1.14.0.jar). Cambié el nombre del jar a bfg.jar y procedí con el comando y funcionó. Lo sé, tonto error. ¡Pero hey!

¿Ha sido útil esta solución?