feat(vcs): Support several git repositories in one project (multi-root)

Only the repository containing the project root was known, so nested clones and
submodules (or a folder of side-by-side service repositories) showed no changes and
could not be committed or pushed. The project now has IDEA's VCS roots: the enclosing
repository plus those found below the project (scanned in the background, rescanned when
a .git appears or goes). Status covers all of them; path-based commands go to the file's
repository and repository-scoped ones take the selected repository.

The Commit view groups changes by repository and commits each one with included changes;
the branch widget names the selected repository and switches between them; Update Project
and Fetch run in every repository; Push lists every repository with outgoing commits; a
repository that stops in a merge or rebase is selected so Continue / Abort act on it.

Closes #12
Цей коміт міститься в:
l0ng-ai committed 2026-10-23 23:01:07 +08:00
1 джерело 7fa1d08b94
коміт 825f190030
32 files changed
+1087 -169

No files matched your search

+42
Переглянути файл
@@ -18,6 +18,48 @@
overflow: hidden;
text-overflow: ellipsis;
}
.repo {
flex: none;
max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
color: var(--fg-muted);
}
.repo::after {
content: " /";
color: var(--fg-subtle);
}
.repos {
flex: none;
display: flex;
flex-wrap: wrap;
gap: 4px;
padding: 6px 8px;
border-bottom: 1px solid var(--border-popup);
}
.repoButton {
max-width: 160px;
height: 22px;
padding: 0 8px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
border: none;
border-radius: var(--radius-small);
background: transparent;
color: var(--fg-secondary);
font: inherit;
font-size: var(--fs-small);
cursor: pointer;
}
.repoButton:hover {
background: var(--bg-hover);
}
.repoSelected,
.repoSelected:hover {
background: var(--bg-selected);
color: var(--fg);
}
.operation {
color: var(--warning);
font-size: var(--fs-tiny);