Można faktycznie mieć wiele różnych obszarów pomostowych (bardziej dosłownie, wiele plików indeksu) w git. Aby osiągnąć pożądany efekt, musielibyście napisać swój własny wariant git add -p
, więc to, co zrobię, to szkic, jak to się dzieje, jak to zrobić.
Domyślny indeks plików jedna git używa, jeśli nie kieruje go do innych plików indeksu życia w .git/index
(lub, bardziej poprawnie powłoki, $GIT_DIR/.index
gdzie $GIT_DIR
jest pobierane ze środowiska lub, jeśli nie jest ustawiona tam, od git rev-parse --git-dir
).
Jeśli jednak ustawisz zmienną środowiskową GIT_INDEX_FILE
, git użyje tego pliku zamiast indeksu. Tak więc, można rozpocząć swoje „zmiany scatter czterech oddziałów” procesie robiąc coś takiego:
GIT_DIR=${GIT_DIR:-$(git rev-parse --git-dir)} || exit 1
index_tmp_dir=$(mktemp -d) || exit 1
trap "rm -rf $index_tmp_dir" 0 1 2 3 15 # clean up on exit
# make four copies of initial staging area
for f in i1 i2 i3 i4; do
cp $GIT_DIR/index $index_tmp_dir/$f
done
# THIS IS THE HARD PART:
# Now, using `git diff-files -p` or similar, get patches
# (diff hunks).
# Whenever you're ready to stage one, pick an index for it,
# then use:
GIT_INDEX_FILE=$index_tmp_dir/$which git apply --cached < diffhunk
# Once done, commit each index file separately with some
# variation on:
for f in i1 i2 i3 i4; do
GIT_INDEX_FILE=$index_tmp_dir/$which git commit
done
Dla części oznaczonej „Najtrudniejsze”, najlepiej może być również skopiować dodatek interaktywny skrypt perla git za , znalezione w $(git --exec-path)/git-add--interactive
, a następnie zmodyfikuj, aby pasowało. Aby usunąć ograniczenie "dokładnie cztery zatwierdzenia", zmień to interaktywnie - dodaj dynamicznie nowy plik indeksu (przez skopiowanie oryginału, lub może utworzenie "pustego" indeksu równego zatwierdzeniu HEAD
lub cokolwiek innego, patrz także git read-tree
).
Czy możesz przełączać się między lokalnymi oddziałami? – neontapir
Nie jestem pewien, czy rozumiem? W jaki sposób pomógłby mi uniknąć przechodzenia przez wszystkie łaty dla każdego zatwierdzenia? –
Myślę, że jestem tym, który nie rozumie. Próbujesz skonfigurować taki przepływ pracy? http://rypress.com/tutorials/git/patch-workflows – neontapir