# Настройка Git в WSL-Ubuntu && Windows

Зайдите в папку проекта.

#### Проверка версии Git

Чтобы узнать, какая версия Git установлена в Ubuntu:

```
git --version

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-329 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ5QQ" decode-data-ved="1" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_797ae71846097008","c_e95c9efc50ee6e3f",null,"rc_b3562b1054356755",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-329"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-329"></div></div></div>*(Если нужно обновить Git до актуальной версии в Ubuntu: `sudo apt update && sudo apt install git -y`).*

Проверить, установлена ли утилита **GitHub CLI (`gh`)** в вашей системе (в WSL Ubuntu, PowerShell на Windows или Linux), можно с помощью любой из следующих команд:

#### Проверка версии (Самый простой способ)

Выполните в терминале:

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-355 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQlgU" decode-data-ved="1" id="bkmrk-bash-1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_cf330d4f6e7c1c4c","c_e95c9efc50ee6e3f",null,"rc_91ad23e6a6b661bd",null,null,"uk",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-355"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-355"><div _ngcontent-ng-c2111435165="" class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c2111435165-355 ng-star-inserted"><span class="ng-tns-c2111435165-355">Bash</span><div _ngcontent-ng-c2111435165="" class="buttons ng-tns-c2111435165-355 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted"></button></div></div></div></div></div>```
gh --version

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-355 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQlgU" decode-data-ved="1" id="bkmrk--3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_cf330d4f6e7c1c4c","c_e95c9efc50ee6e3f",null,"rc_91ad23e6a6b661bd",null,null,"uk",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-355"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-355"></div></div></div>- **Если `gh` установлен:** Вы увидите версию утилиты и архитектуру, например:
    
    `gh version 2.52.0 (2024-06-20)`
- **Если `gh` НЕ установлен:**
    
    
    - В **WSL / Ubuntu** вы получите сообщение: `Command 'gh' not found...`
    - В **Windows PowerShell** вы получите ошибку: `gh : Имя "gh" не распознано как имя командлета...`

#### Проверка пути к исполняемому файлу

- **В WSL / Ubuntu / Linux:**
    
    <div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-356 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQlwU" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_cf330d4f6e7c1c4c","c_e95c9efc50ee6e3f",null,"rc_91ad23e6a6b661bd",null,null,"uk",null,1,null,null,1,0]]"></div>```
    which gh
    
    ```
    
    <div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-356 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQlwU" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_cf330d4f6e7c1c4c","c_e95c9efc50ee6e3f",null,"rc_91ad23e6a6b661bd",null,null,"uk",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-356"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-356"></div></div></div>*(Если установлен, вернет путь вида `/usr/bin/gh` или `/usr/local/bin/gh`).*
- **В Windows PowerShell:**
    
    <div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-357 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQmAU" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_cf330d4f6e7c1c4c","c_e95c9efc50ee6e3f",null,"rc_91ad23e6a6b661bd",null,null,"uk",null,1,null,null,1,0]]"></div>```
    Get-Command gh
    
    ```
    
    <div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-357 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQmAU" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_cf330d4f6e7c1c4c","c_e95c9efc50ee6e3f",null,"rc_91ad23e6a6b661bd",null,null,"uk",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-357"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-357"></div></div></div>

#### Как быстро установить `gh`, если его нет:

**В WSL / Ubuntu:**

```
sudo apt update && sudo apt install gh -y
```

**В Windows (через winget в PowerShell):**

```
winget install --id GitHub.cli
```

Перед началом работы с репозиторием в GitHub вам нужно к нему подключиться с помощью команды

```
gh auth login

```

Далее последует небольшой диалог, в приведенном примере я использую ключ GitHub для авторизации:

```
gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: **************************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
! Authentication credentials saved in plain text
✓ Logged in as YourGitLogin
```

Чтобы склонировать репозиторий с GitHub со всеми ветками и полной историей, **достаточно выполнить стандартную команду `git clone`**:

```
git clone git@github.com:username/repository.git

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-430 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ7QU" decode-data-ved="1" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_b5f604c1686bc56d","c_e95c9efc50ee6e3f",null,"rc_eee06e98e3aa2217",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-430"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-430"></div></div></div>*(Или через HTTPS / GitHub CLI, например: `gh repo clone username/repository`).*

Вопреки распространенному заблуждению, **стандартный `git clone` по умолчанию скачивает абсолютно ВСЕ ветки, теги и всю историю проекта**.

Однако локально Git сразу создает текстовую указательную ветку только для главной (обычно `main` или `master`). Остальные ветки остаются в так называемом режиме отслеживания (*remote-tracking branches*).

#### Как увидеть все забранные ветки и работать с ними

##### 1. Посмотреть список всех веток

Перейдите в папку проекта (`cd repository`) и выполните:

```
git branch -a

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-431 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ7gU" decode-data-ved="1" id="bkmrk--7" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_b5f604c1686bc56d","c_e95c9efc50ee6e3f",null,"rc_eee06e98e3aa2217",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-431"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-431"></div></div></div>Вы увидите список:

```
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/dev
  remotes/origin/feature-login

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-432 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ7wU" decode-data-ved="1" id="bkmrk--10" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_b5f604c1686bc56d","c_e95c9efc50ee6e3f",null,"rc_eee06e98e3aa2217",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-432"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-432"></div></div></div>Все ветки с префиксом `remotes/origin/` **уже находятся на вашем компьютере**, их не нужно скачивать заново из интернета.

##### 2. Как переключиться на нужную ветку

Чтобы начать работать с любой из локально загруженных веток (например, `dev`), просто переключитесь на нее:

```
git checkout dev

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-433 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ8AU" decode-data-ved="1" id="bkmrk--13" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_b5f604c1686bc56d","c_e95c9efc50ee6e3f",null,"rc_eee06e98e3aa2217",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-433"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-433"></div></div></div>*(В современных версиях Git также можно использовать `git switch dev`).*

Git автоматически создаст локальную ветку `dev`, свяжет ее с `origin/dev` и переключит ваш рабочий каталог.

#### Если вам нужно гарантированно развернуть ЛОКАЛЬНЫЕ копии ВСЕХ веток сразу

Если ваша цель — не просто скачать проект, а сделать так, чтобы команда `git branch` (без флага `-a`) сразу показывала полный список всех веток как локальных, используйте короткий однострочник прямо в терминале:

**В WSL / Ubuntu (Bash):**

```
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-434 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ8QU" decode-data-ved="1" id="bkmrk--16" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_b5f604c1686bc56d","c_e95c9efc50ee6e3f",null,"rc_eee06e98e3aa2217",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-434"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-434"></div></div></div>**В Windows PowerShell:**

```
git branch -r | Where-Object { $_ -notmatch '->' } | ForEach-Object {
    $branch = $_.Trim().Replace('origin/', '')
    git branch --track $branch $_.Trim()
}
git fetch --all

```

<div _ngcontent-ng-c2111435165="" class="code-block ng-tns-c2111435165-435 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwi6k8jGoo6WAxUAAAAAHQAAAAAQ8gU" decode-data-ved="1" id="bkmrk--18" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_b5f604c1686bc56d","c_e95c9efc50ee6e3f",null,"rc_eee06e98e3aa2217",null,null,"ru",null,1,null,null,1,0]]"><div _ngcontent-ng-c2111435165="" class="formatted-code-block-internal-container ng-tns-c2111435165-435"><div _ngcontent-ng-c2111435165="" class="animated-opacity ng-tns-c2111435165-435"></div></div></div>После выполнения этого скрипта каждая удаленная ветка превратится в полноценную локальную ветку.

#### Рекомендуемый файл .gitignore для проекта в связке с .NET и REACT:

```bash
# ==========================================
# .NET / C# (Правила сработают для любой подпапки)
# ==========================================
## --- Build & Output directories ---
bin/
obj/
out/
[Bb]in/
[Ob]j/

## --- Visual Studio & Rider temporary files ---
.vs/
.idea/
*.user
*.userosscache
*.sln.docstates
*.suo
*.userprefs

## --- NuGet Packages & Cache ---
*.nupkg
*.snupkg
**/packages/
project.lock.json
project.assets.json

## --- Local settings & Secrets ---
# Локальные пользовательские конфигурации (раскомментируйте, если не хотите коммитить appsettings.Development.json)
# appsettings.Development.json
# appsettings.*.local.json
secrets.json

## --- Test Results & Coverage ---
[Tt]est[Rr]esult*/
*.coverage
*.coveragexml

# ==========================================
# Node.js / Frontend (Vue, React и т.д.)
# ==========================================
node_modules/
dist/
.npm
*.log

# ==========================================
# Общие временные файлы ОС
# ==========================================
.DS_Store
Thumbs.db

```