miércoles, 29 de enero de 2025

Remmina solucion de problemas. Cannot connect to the "192.168.xxx.xxx" RDP Server. Freerdp. Depurador d remmina

 1. Configuración

1.1 ~/.config/freerdp/server   

carpeta que contiene los certificados para conectarse. Los nombres son : 192.168.XXX.XXX_3389.pem

1.2 ~/.config/freerdp/known_hosts2

fichero que contiene la IP, huella del certificado y otro dato mas del servidor al que queremos conectar.

1.3 ~/.local/share/remmina

Nos da las configuraciones de los servidores. Los nombres de ficheros que contiene son: 
group_rdp_connexió-ràpida_192-168-xxx-xxx.remmina

Si creamos una configuración, hay que darle solo estos parámetros:


Hay que darle solo estos datos:


y se guarda en esta carpeta carpeta indicada

Si mostramos el contenido de un fichero vemos:

password=XXXXXXXXX
gateway_username=
notes_text=
vc=
preferipv6=0
serialname=
ssh_tunnel_loopback=0
tls-seclevel=
sound=off
printer_overrides=
name=Win11-ximo
console=0
colordepth=99
security=
precommand=
disable_fastpath=0
left-handed=0
multitransport=0
postcommand=
group=
server=192.168.xxx.xxx
ssh_tunnel_command=
glyph-cache=0
ssh_tunnel_enabled=0
disableclipboard=0
labels=
audio-output=
parallelpath=
monitorids=
cert_ignore=0
gateway_server=
serialpermissive=0
protocol=RDP
old-license=0
disconnect-prompt=0
ssh_tunnel_password=
resolution_mode=2
assistance_mode=0
pth=
disableautoreconnect=0
loadbalanceinfo=
clientbuild=
clientname=
resolution_width=0
drive=
username=ximo
relax-order-checks=0
base-cred-for-gw=0
profile-lock=0
network=none
rdp2tcp=
gateway_domain=
serialdriver=
rdp_reconnect_attempts=
gateway_password=
domain=edificio.municipio Quitar esto para que funcione !!!!!
restricted-admin=0
ssh_tunnel_certfile=
exec=
multimon=0
serialpath=
enable-autostart=0
smartcardname=
usb=
ssh_tunnel_passphrase=
disablepasswordstoring=0
shareprinter=0
shareparallel=0
quality=0
span=0
parallelname=
ssh_tunnel_auth=0
keymap=
ssh_tunnel_username=
execpath=
shareserial=0
resolution_height=0
rdp_mouse_jitter=No
useproxyenv=0
sharesmartcard=0
freerdp_log_filters=
microphone=
timeout=
ssh_tunnel_privatekey=
gwtransp=http
ssh_tunnel_server=
ignore-tls-errors=1
dvc=
gateway_usage=0
disable-smooth-scrolling=0
no-suppress=0
websockets=0
freerdp_log_level=INFO
window_width=640
window_height=480
viewmode=1
window_maximize=0

Se muestran los parámetros que hay que tener mas cuidado pues los otros los da el sistema automáticamente.

OJO Para que funcione en windows 11 hay que quitar el domain=ZZZZZZZZZZZZZZZZ

que es el error que sale 

cannot connect to the "192.168.xxx.xxx" RDP Server


Si es windows v7 el servidor tiene estos parámetros

[remmina]
password=
gateway_username=
notes_text=
vc=
window_height=727
preferipv6=0
ssh_tunnel_loopback=0
serialname=
tls-seclevel=0
sound=local
printer_overrides=
name=192.168.xxx.xxx -Windows 7 Ximo
console=0
colordepth=99
security=
precommand=
disable_fastpath=0
postcommand=
left-handed=0
multitransport=0
group=
server=192.168.xxx.xxx
ssh_tunnel_certfile=
glyph-cache=0
ssh_tunnel_enabled=0
disableclipboard=0
labels=
audio-output=
parallelpath=
monitorids=
cert_ignore=0
gateway_server=
serialpermissive=0
protocol=RDP
old-license=0
disconnect-prompt=0
ssh_tunnel_password=
resolution_mode=2
assistance_mode=0
pth=
loadbalanceinfo=
disableautoreconnect=0
clientbuild=
clientname=
resolution_width=0
drive=/media/ximo/126b1584-0fd8-4183-95a2-21b2729538b9/DATOS_XIMO
relax-order-checks=0
base-cred-for-gw=0
gateway_domain=
profile-lock=0
rdp2tcp=
gateway_password=
serialdriver=
rdp_reconnect_attempts=
domain=edificio.ayuntamiento
smartcardname=
exec=
serialpath=
multimon=0
username=ximo
enable-autostart=0
usb=
shareprinter=0
network=autodetect
restricted-admin=0
ssh_tunnel_passphrase=
quality=2
span=0
disablepasswordstoring=0
parallelname=
shareparallel=0
ssh_tunnel_auth=0
rdp_mouse_jitter=No
keymap=
ssh_tunnel_username=
viewmode=1
execpath=
resolution_height=0
useproxyenv=0
timeout=
freerdp_log_filters=
shareserial=0
dvc=
microphone=
ssh_tunnel_privatekey=
ssh_tunnel_server=
gwtransp=http
ignore-tls-errors=1
sharesmartcard=0
disable-smooth-scrolling=0
window_maximize=0
keyboard_grab=0
window_width=1487
no-suppress=0
gateway_usage=0
websockets=0
freerdp_log_level=INFO
ssh_tunnel_command=


2. Funcionamiento

Cada vez que creamos una conexión , nos propone un certificado y debemos aceptarlo.

Pero si no nos deja conectar debemos borrar el certificado en base a su IP en la carpeta ~/.config/freerdp/server  y del fihero ~/.config/freerdp/known_hosts2


3. Freerdp al rescate

Si no funciona podemos ejecutar en una shellls

xfreerdp /v:server_IP /u:user /p:"password" /dynamic-resolution

y  nos dice

Certificate details for 192.168.xxx.xxx:3389 (RDP-Server):
	Common Name: A03-INF-011.edificio.municipio
	Subject:     CN = A03-INF-011.edificio.municipio
	Issuer:      CN = A03-INF-011.edificio.municipio
	Thumbprint:  e1:9c:xx:39:xx:33:5f:b0:xx:08:c2:6d:xxY:c7:f5:a0:b4:18:c3:95:8a:11:df:15:d4:67:70:55:ce:97:4b:aa
The above X.509 certificate could not be verified, possibly because you do not have
the CA certificate in your certificate store, or the certificate has expired.
Please look at the OpenSSL documentation on how to add a private CA to the store.
Do you trust the above certificate? (Y/T/N)

Si le contestamos que Y, nos deja entrar en la máquina

4. Depuración de remmina

Vamos a la pantalla indicada y nos sale la consola para hacer depuración




viernes, 24 de enero de 2025

Python (XXIII): "Camel Case" to "snake case": Script para cambiar todo un proyecto de nomenclatura

He instalado SonarQube Lint en VS y me ha llenado de "problemas" elcódigo pues megusta usar la nomenclatura "camel case" (camelCase) vez de "snake case" (snake_case) .

Debemos tener en cuenta que hay que respetar los comentarios, strings y expresiones regulares

Veamos el script que nos ha propuesto Chat GPT

import os
import re

def camel_to_snake(name):
    """Convierte un nombre de camelCase o PascalCase a snake_case."""
    # Reemplaza las mayúsculas precedidas por minúsculas o números por '_'
    name = re.sub(r'(?<=[a-z0-9])(?=[A-Z])', '_', name)
    # Reemplaza secuencias de mayúsculas seguidas de minúsculas (e.g., XMLParser -> xml_parser)
    name = re.sub(r'(?<=[A-Z])(?=[A-Z][a-z])', '_', name)
    return name.lower()

def process_file(file_path):
    """Procesa un archivo Python para reemplazar camelCase y PascalCase por snake_case."""
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    
    # Expresión regular para detectar cadenas, comentarios y regex
    pattern = r"""
        (['"]{3}.*?['"]{3})|          # Bloques de texto '''...''' o """..."""
        (['"].*?['"])|                # Strings simples '...' o "..."
        (#.*?$)|                      # Comentarios que comienzan con #
        (re\.compile\(\s*['"].*?['"]\))  # Expresiones regulares en re.compile(...)
    """
    
    # Función para preservar coincidencias
    def preserve_match(match):
        return match.group(0)  # Devuelve el bloque encontrado sin modificaciones

    # Expresión regular para encontrar nombres en camelCase o PascalCase
    camel_case_pattern = r'\b[a-zA-Z]+[A-Z][a-zA-Z]*\b'
    
    # Reemplaza fuera de strings, comentarios y regex
    def replace_non_protected(match):
        block = match.group(0)
        if match.group(0).startswith(('#', "'", '"', 're.compile(')):
            return preserve_match(match)
        else:
            return re.sub(camel_case_pattern, lambda m: camel_to_snake(m.group(0)), block)

    # Aplica el reemplazo
    updated_content = re.sub(
        pattern,
        replace_non_protected,
        content,
        flags=re.DOTALL | re.MULTILINE | re.VERBOSE
    )
    
    # Sobrescribe el archivo si hubo cambios
    if content != updated_content:
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(updated_content)
        print(f"Actualizado: {file_path}")

def process_directory(directory):
    """Procesa todos los archivos Python en un directorio recursivamente."""
    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith('.py'):  # Solo archivos Python
                process_file(os.path.join(root, file))

if __name__ == "__main__":
    project_directory = input("Introduce el directorio del proyecto: ").strip()
    process_directory(project_directory)
    print("Proceso completado.")









jueves, 23 de enero de 2025

Sonarqube

Sonarqube nos permite detectar hasta ahora 331 deficiencias del código en Visual Studio como:

  1. No tener código comentado. Quiere que los comentarios sean expícitos de lo que se hace y no quiere que llenemos de código basura los comentarios.
  2. Detecta variables que no se usan
  3. Detecta codigo repetitivo. Por ejemplo si asignamos varias veces a diferentes variables tipo "string" el mismo valor, quiere que definamos una constante y que asignemos a cada variable esta constante.
  4. En python se queja que utilicemos la nomenclatura "camel case" (miCasa) de Java y nos pide que la cambiemos a "snake case" (mi_casa) para el caso particular de Python
  5. Detecta condiciones que no se van a ejecutar (código inalcanzable)
  6. Verifica que la correcta declaración de funciones y que devuelvan el número y tipo de valores que se han definido. También verifica las llamadas
  7. Se hace cargo de las variables que vamos a utilizar resultrado de la llamada a una función. Las que no utilicemos quiere que las nombremos con un guión bajo "_"




GitLab (3): Actualizar GitLab, Copia de seguridad, Runners, email

1. Copia de Seguridad de Gitlab

Veamos los pasos a seguir:

Crear una copia de seguridad completa el el deriectorio por omisión que es /var/opt/gitlab/backups y el nombre de 1737627801_2025_01_23_17.8.1_gitlab_backup.tar o parecido Siendo la parte verde el timestamp de la copia y la parte azaul la versión de gitlab

sudo gitlab-backup create

Pero hay que hacer también una copia de la configuración que es el directorio /etc/gitlab para ello ejecutamos :

sudo tar -czf /var/opt/gitlab/backups/gitlab_config_backup.tar.gz /etc/gitlab

Siendo la parte azul, la carpeta que por omisión se guardan los backups de gitlab, la parte verde es el nombre del fichero de la copia y la parte magenta es la carpeta donde están los ficheros de configuración.

También podemos hacer un cron-tab de dicho proceso, o utilizar un rsync para sincronizar con otro servidor

2. Actualizar GitLab

Vamos al botón qe hay abajo a la izquierda "Admin" y nos aparece na pantalla con múltiples datos. En concreto en la zona "GitLab Version"- "Components", si hay alguna versión nueva nos lo dice, y es conveniene actualizarla.


En este caso no aparece.

Para actualizar hay que meterse en el servidor por ssh

ssh usuario@192.XXX.XXX.XXX

y dentro del servidor LDAP se ejecuta

sudo apt update
sudo apt dist-upgrade

A veces puede fallar, pues a veces no quiere que cambiemos directamente a la versión actual sin pasar por versiones intermedias. En este caso habría que consultar los logs para ir migrando escalonadamente, y preguntar al Chat GPT los comandos para hacerlo

Pero hay que hacer una copia de seguridad de los ficheros de Gitlab

3. Definir el email

Hay que actualizar el fichero /etc/gitlab/gitlab.rb y dar valores a los siguientes parámetros que estan comentados con una almohadilla. Por ejemplo para gmail: (a partir de aquí es cfopiado de Chat GPT)

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "tu_correo@gmail.com"
gitlab_rails['smtp_password'] = "tu_contraseña"
gitlab_rails['smtp_domain'] = "gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = "peer"

#-------------------------------------
# Estos datos pueden ser importantes
#-------------------------------------
gitlab_rails['gitlab_email_from'] = 'gitlab@tu-dominio.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab Notifications'

Guardamos y ejecutamos

sudo gitlab-ctl reconfigure

Y para probar:

sudo gitlab-rails console

y en la consola interactiva de Rails ejecutar:

Notify.test_email('correo_destinatario@dominio.com', 'Prueba de correo', 'Esto es un correo de prueba de GitLab.').deliver_now

4. Runners

Podemos tener por ejemplo un "branch" de "development" y otra "branch" de "deployment". Si cada vez que actualizamos la "branc" de despliegue, queremos actualizarla en el servidor que va a desplegar dicha apliación, entonces podemos utilizar runners.

He pedido a chat GPT que me haga un runner para que actualice la carpeta "/home/deploys" del servidor del despliegue "myserver.midominio.es"

Y me contesta:

1. Paso 1:

Se crea el archivo ".gitlab-ci.yml" en el  servidor gitlab

stages:
  - deploy

deploy_to_server:
  stage: deploy
  only:
    - deploy
  script:
    - echo "Iniciando el despliegue en el servidor remoto..."
    - ssh -o StrictHostKeyChecking=no user@myserver.dominio.es 'rm -rf /home/deploys/*'
    - scp -r . user@myserver.dominio.es:/home/deploys/
  environment:
    name: production
    url: http://myserver.dominio.es

Siendo:

Stages:    Define una etapa llamada deploy.

Job (deploy_to_server):

    stage: Este trabajo pertenece a la etapa deploy.

    only: El trabajo solo se ejecutará cuando se actualice la branch deploy.

    script:

        Elimina el contenido existente de /home/deploys en el servidor remoto.

        Usa scp para copiar los archivos del repositorio al servidor remoto.

    environment: Define que este trabajo pertenece al entorno production y establece la URL correspondiente.

2. Paso 2

Se configura el servidor remoto de manera que pueda recibir conexiones SSH y:

Se crea un usuario para depliegue, seleda permiso al directorio de despliegue 

sudo adduser user

sudo mkdir -p /home/deploys
sudo chown -R user:user /home/deploys

Hay que permitir la conexión por SSH, para ello se agrea la clave pública de GitLab  Runner al archivo  ~/.ssh/authorized_keys del usuario user.


3. Paso 3

Para configurar las claves  SSH en GitLab

En el servidor gitlab, ejecutar:

ssh-keygen -t ed25519 -C "gitlab-runner"

Agrega la clave privada (la que NO termina en ".pub") en una variable protegida en Gitlab. Para ello apretamos el botón "Admin" de la parte inferior izquierda y luego "Settings"

En "Settings" hay un desplegable que tiene además "CI/CD", que abre una pantalla que entre otras cosas tiene "Variables" y le damos al botón de la derecha "Add variable" que le llamamos "SSH_PRIVATE_KEY" y le pegamos el contenido de la clave privada.

Ahora agregamos la clave pública (la que termina en ".pub") al archivo ~/.ssh/authorized_keys del usuario user en el servidor remoto.

4. Paso 4

Actualizamos el fichero  ".gitlab-ci.yml" en el  servidor gitlab para usar la clave SSH

stages:
  - deploy

deploy_to_server:
  stage: deploy
  only:
    - deploy
  before_script:
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
    - chmod 600 ~/.ssh/id_ed25519
    - ssh-keyscan -H myserver.dominio.es >> ~/.ssh/known_hosts
  script:
    - echo "Iniciando el despliegue en el servidor remoto..."
    - ssh user@myserver.dominio.es 'rm -rf /home/deploys/*'
    - scp -r . user@myserver.dominio.es:/home/deploys/
  environment:
    name: production
    url: http://myserver.dominio.es

Notas Finales:

    Seguridad:

        Las variables protegidas deben configurarse como "Masked" y "Protected" en GitLab.

        Asegúrate de que solo los usuarios autorizados puedan acceder a las variables y la branch deploy.


    Pruebas:

        Antes de activar este pipeline, pruébalo manualmente ejecutando los comandos SSH y scp desde el Runner o desde tu máquina local.

Con esto, tu pipeline debería estar listo para actualizar automáticamente el servidor remoto cada vez que se realice un push en la branch deploy. 



GitLab (2): Crear clave SSH, Grupos, Usuarios, Copiar un proyecto del servidor al ordenador local. Branches. Error de permiso: Git: remote: Gitlab: You are not allowed to push code to protected branches on this project

1. Crear usuarios

Vamos a inicio clicando  que está en la parte superior izquierda. A continuación, clicamos el botón "Admin"que està en la parte inferior izquierda.


En la parte izquierda en "Admin area" seleccionamos "Users"


En la parte superior derecha le damos al botón "New User" 
Y en mi caso le voy a dar permisos de administrador

Ahora toca darle una contraseña. Si no se la hemos dado antes, en la lista de usuarios le damos al botón "Edit" que está a la derecha del usuario

Y le damos la contraseña

2. Crear una clave SSH específica para este usuario

Esta clave nos permite la comunicación entre el servidor LDAP y el ordenador cliente de forma cómoda.

Ahora tenemos que entrar a gitlab en el navegador, dando el usuario y contraseña del usuario que hemos creado (en mi caso ximo_dante) y clicamos en el avatar de nuestro perfil enla parte superior izquierda. Ojo esta clave a crear sirve para identificar solo a este usuario (ximo_dante). Es decir si desde un ordenador remoto se utiliza esta clave, entiende que es "ximo_dante" quien ha accedido a GitLab, aunque en el otro ordenador  se haya identificado como "jaimito"

Y seleccionamos Preferences

Ahora podemos ver a la izquierda en "User Settings" la opción de SSH Keys

Y ahora le damos al botón de la izquierda  


Quitar la fecha de expiración!!!!

OJO verificar que en /home/ximo/.ssh no existan dos ficheros llamados  id_ed25519id_ed25519.pub, pues si existen los machacara. Para ello hay que cambiar el nombre de estos ficheros.

Y en "learn more" nos sale una pantalla de ayuda que en definitivas cuentas quiere que ejecutemos en el ordenador cliente (NO en el servidor) este comando o similar

ssh-keygen -t ed25519 -C "Ximo Dante en la maquina de casa"

Donde con "-C" indicamos un comentario para que cuando lo tenga el servidor tener referencias

Y nos pedira si queremos cambiar el nombre del fichero y una contraseña. En principio omito la contraseña y creará en /home/ximo/.ssh dos ficheros llamados  id_ed25519 y id_ed25519.pub

Ahora copiamos el contenido del fichero de la clave pública "id_ed25519.pub" en el cuadro grande de la pantalla anterior que tiene por título "Key"


Y ahora le damos al botón 

3. Crear Grupos

Los grupos son como una carpeta para guardar los proyectos

Para crear un grupo le damos al avatar que hay en la parte superior izquierda y elegimos el usuario

Y ya nos aparece "Groups" en el menú lateral y le damos al botón de "New Group" y "Create Group". En mi caso le he dado al nombre de grupo "Softprop"




Y le damos al botón de "Create Group" y ya lo tenemos.

3.1 Dar acceso a usuarios al grupo, Visibilidad. Errores de acceso

Si le hemos creado el proyecto como privado, solamente el usuario que ha creado el proyecto puede verlo. Dicho usuario ha importado unas SSH keys, y son las que Gitlab comprueba para dar acceso. Es decir si cedemos la clave SSH a otro usuario y este la utiliza, entonces GiTLab entiende es el usuariop original quien se está conectando.
En el caso de repositorios con visibilidad interna, cualquier usuario registrado puede acdeder a él.
Y si el repositorio es público, cualquier usuario, registrado o no puede acceder a él.
Para el caso de proyectos privados, si queremos acceder a él, hay que pasarle la clave SSH que se ha guradado el usuario que creó el proyecto.
Si tenemos varias claves SSH en el ordenador cliente, y no las hemos declarado en el fichero ~/.ssh/config  entonces el ordenador va buscando una que se ajuste a la IP o dominio indicado, y la primera que encuentra, intenta validarse con ella. SI resulta que dicha clave es la que registró otro usuario de Gitlab, y no se le ha dado permisos a este usuario de Gitlab al proyecto, entonces no dejará entrar y dará ese error del proyecto.

Para dar acceso a otros usuarios de GitLab, vamos al botón "Admin" de la parte de abajo a la izquierda. Luego en "Admin area" de la izquierda seleccionamos "Groups". Marcamos nuestro gtrupo "Softprop" y aparece esta pantalla


Le damos al "Manage access
Seleccionamos el usuario y le damos al botón invitar.
Si no hacemos esto, da error cuando intentamos subir al repositorio los cambios producidos en la carpeta del ordenador cliente.

Git: remote: Gitlab: You are not allowed to push code to protected branches on this project


y "Invite Members"

Seleccionamos un usuario de los que nos propone y "Invite"

3.2 Fichero del cliente ~/.ssh/config

Este fichero es muy importante si no queremos tener problemas, pues nos indica para cada servidor que fichero de claves SSH hay que utilizar. Veamos esta casuística sin fichero config:
  • Como hemos dicho, si solo hay una clave SSH en la carpeta ~/.ssh, entonces no hay problema. 
  • Si para cada servidor hay solo una clave SSH, tampoco hay problema, pues para conectarnos con el servidor, el sistema va buscando una clave SSH que se corresponda con el servidor buscado. 
  • Pero si tenemos varias claves SSH, y cada una se generó con un usuario distinto en GitLab, si queremos acceder al servidor GitLab y pillamos una clave generada para un usuario de GitLab que no tiene acceso al proyecto (pues este proyecto es privado)
Veamos un ejemplo de fichero config:

# GITHUB
Host github.com
   HostName github.com
   PreferredAuthentications publickey
   IdentityFile ~/.ssh/id_rsa_hub

# GITLAB
Host gitlab.com
   HostName gitlab.com
   PreferredAuthentications publickey
   IdentityFile ~/.ssh/id_rsa_lab

En este caso definimos el servidor a entrar, el tipo de autenticación y el fichero de identidad a usar (que es el que tiene las claves SSH).
No está definido el usuario a utilizar, pero en el caso de querer usar otro usuario, basta con cambiar el nombre fichero 

4. Crear Proyecto.

Aprovechando la pantalla anterior, enla parte superior derecha hay un botón 
y le damos a "Create blank project" y le damos de nombre "10.softprop-python"

Y le damos a "Create Project"

4. Copiar el proyecto al ordenador local

Una vez hemos creado el proyecto le damos al botón Code y copiamos el "Clone with SSH"


Ahora que hemos copiado el clone with SSH, nos vamos al ordenador cliente, y en la carpeta PADRE de donde queremos copiar el proyecto hacemos el "git clone" para crearnos la carpeta 

# Vamos a la carpeta padre del proyecto
cd ~
cd MyPython

# Hacemos el gitclone
git clone git@gitlab.XXXXXXX.es:softprop/10.softprop-python.git

Y si nos fijamos, ya tenemos la carpeta del proyecto creada

Nos vamos a Visual Studio y nos metemos en la carpeta


Veamos los ficheros importantes:

4.1 .gitignore

Se encuentra en la carpeta del proyecto. Un ejemplo del mismo es:

venv_softprop-python
my_not_inmportant_folder
__pycache__

Siendo:

  •  "venv_softprop-python" el entorno virtual python del proyecto
  • "my_not_inmportant_folder" una carpeta que no es importante
  • "__pycache__" una carpeta donde VStudio se guarda datos internos

4.2 .git/config


[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git@gitlab.XXXXXXXX.es:softprop/10.softprop-python.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
	remote = origin
	merge = refs/heads/main
	vscode-merge-base = origin/main

Aquí podemos ver el repositorio que engancha.

5. Crear "Branches"

Dentro de VS podemos crear "Branches" así