Git: impone la authentication y desactiva el committer "desconocido"

He instalado Git en un cuadro de Windows, y varios usuarios de git configuraron quién autentica el uso de la contraseña. Sin embargo, todos los commands de git (por ejemplo, git pull) realizados en la máquina de Windows local (a través de git bash) no requieren authentication. Los compromisos de esa concha muestran al autor como "desconocido". Aunque soy consciente de que se puede configurar un nombre de usuario y un correo electrónico para evitar confirmaciones de "desconocido", quiero aplicar la authentication para que el usuario tenga que iniciar session antes de cualquier acción de git.

En segundo lugar, ¿cómo puedo combinar el autor "desconocido" con un usuario existente para que el historial de compromiso se fusione?

Acerca de la segunda parte de su pregunta: hay un command git filter-branch que le permite reescribir el historial de Git. Uso:

 git filter-branch --env-filter ' oldname="(old name)" oldemail="(old email)" newname="(new name)" newemail="(new email)" [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ] && GIT_AUTHOR_EMAIL="$newemail" [ "$GIT_COMMITTER_EMAIL" = "$oldemail" ] && GIT_COMMITTER_EMAIL="$newemail" [ "$GIT_AUTHOR_NAME" = "$oldname" ] && GIT_AUTHOR_NAME="$newname" [ "$GIT_COMMITTER_NAME" = "$oldname" ] && GIT_COMMITTER_NAME="$newname" ' HEAD 

Para get más información, compruebe git docs o este artículo dedicado en github.

Aunque puede ser muy doloroso si tiene muchos usuarios existentes identificados como "desconocidos".

Y sobre la primera parte, yo:

  1. Compruebe user.name y user.email en git config. No tienen nada que ver con las cnetworkingenciales, pero git las usa para almacenar información de autoría. Es posible que necesite configurarlos (como global con git config --global para usar para cada repository, o como repository basado en git config ).
  2. Compruebe si git no usa cnetworkingenciales para evitar la repetición. ( git config -l ), si lo hace, elimínelo (creo que git config --global --unset cnetworkingential.helper pero estoy seguro).

Es posible que desee comprobar esto o estas respuestas.

Como podría haber más usuarios de git duplicates (en el nombre o en las variaciones de correo electrónico) en el futuro, he decidido utilizar un file .mailmap . Esto es lo que solía solucionar mi problema:

  1. Git bash en el repository git local e imprime una list de committers

    git shortlog -sne

  2. Decide qué set de nombres de commit fusionar. En la raíz del repository:

    touch .mailmap

    vi .mailmap

  3. Entrada en este formatting:

    Proper name 1 <name1@example.com> unknown1 <badname1@example.com> Proper name 1 <name1@example.com> unknown2 <badname2@example.com> Proper name 2 <name2@example.com> unknown3 <badname3@example.com>

  4. Realice una verificación, y los nombres deberían fusionarse ahora:

    git shortlog -sne