Require native Git runtime and bundle full manpages
- Remove the app fallback path when native Git is unavailable and show a startup blocker instead - Fix native level setup for staged file counting and cherry-pick parity - Improve manpage loading/search and bundle full Git documentation assets - Integrate Git cross-compilation into AndroidProjectTooling.sh and remove debug AAB support
This commit is contained in:
@@ -16,6 +16,11 @@ CMDLINE_TOOLS_LATEST_DIR="$CMDLINE_TOOLS_DIR/latest"
|
|||||||
WRAPPER_JAR_PATH="$PROJECT_DIR/gradle/wrapper/gradle-wrapper.jar"
|
WRAPPER_JAR_PATH="$PROJECT_DIR/gradle/wrapper/gradle-wrapper.jar"
|
||||||
LOCAL_PROPERTIES_PATH="$PROJECT_DIR/local.properties"
|
LOCAL_PROPERTIES_PATH="$PROJECT_DIR/local.properties"
|
||||||
HOST_GIT_BINARY="$PROJECT_DIR/build/host-git/libgit.so"
|
HOST_GIT_BINARY="$PROJECT_DIR/build/host-git/libgit.so"
|
||||||
|
GIT_SRC_DIR="$TMP_DIR/git-src"
|
||||||
|
HOST_GIT_DIR="$PROJECT_DIR/build/host-git"
|
||||||
|
ANDROID_JNI_DIR="$PROJECT_DIR/app/src/main/jniLibs"
|
||||||
|
ANDROID_ASSET_MANPAGE_DIR="$PROJECT_DIR/app/src/main/assets/manpages"
|
||||||
|
ANDROID_API=24
|
||||||
|
|
||||||
ANDROID_CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip"
|
ANDROID_CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip"
|
||||||
GRADLE_DIST_URL="https://services.gradle.org/distributions/gradle-8.7-bin.zip"
|
GRADLE_DIST_URL="https://services.gradle.org/distributions/gradle-8.7-bin.zip"
|
||||||
@@ -24,6 +29,7 @@ ANDROID_NDK_PACKAGE="ndk;27.2.12479018"
|
|||||||
ANDROID_CMAKE_PACKAGE="cmake;3.22.1"
|
ANDROID_CMAKE_PACKAGE="cmake;3.22.1"
|
||||||
ANDROID_NDK_DIR="$SDK_DIR/ndk/27.2.12479018"
|
ANDROID_NDK_DIR="$SDK_DIR/ndk/27.2.12479018"
|
||||||
ANDROID_CMAKE_DIR="$SDK_DIR/cmake/3.22.1"
|
ANDROID_CMAKE_DIR="$SDK_DIR/cmake/3.22.1"
|
||||||
|
ANDROID_TOOLBIN="$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||||
STATE_TTL_SECONDS=86400
|
STATE_TTL_SECONDS=86400
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
@@ -252,6 +258,128 @@ setup_env() {
|
|||||||
export GRADLE_USER_HOME="$GRADLE_USER_HOME_DIR"
|
export GRADLE_USER_HOME="$GRADLE_USER_HOME_DIR"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
require_path() {
|
||||||
|
if [ ! -e "$1" ]; then
|
||||||
|
echo "Required path not found: $1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_git_source() {
|
||||||
|
mkdir -p "$TMP_DIR"
|
||||||
|
if [ ! -d "$GIT_SRC_DIR/.git" ]; then
|
||||||
|
log "Cloning Git source"
|
||||||
|
git clone --depth 1 https://github.com/git/git.git "$GIT_SRC_DIR"
|
||||||
|
else
|
||||||
|
log "Using existing Git source checkout"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
common_git_make_args() {
|
||||||
|
printf '%s\n' \
|
||||||
|
NO_OPENSSL=YesPlease \
|
||||||
|
NO_CURL=YesPlease \
|
||||||
|
NO_EXPAT=YesPlease \
|
||||||
|
NO_GETTEXT=YesPlease \
|
||||||
|
NO_TCLTK=YesPlease \
|
||||||
|
NO_PERL=YesPlease \
|
||||||
|
NO_PYTHON=YesPlease \
|
||||||
|
NO_INSTALL_HARDLINKS=YesPlease \
|
||||||
|
NO_ICONV=YesPlease \
|
||||||
|
NO_REGEX=NeedsStartEnd \
|
||||||
|
HAVE_ALLOCA_H=YesPlease \
|
||||||
|
HAVE_PATHS_H=YesPlease \
|
||||||
|
HAVE_CLOCK_GETTIME=YesPlease \
|
||||||
|
HAVE_CLOCK_MONOTONIC=YesPlease \
|
||||||
|
HAVE_GETDELIM=YesPlease \
|
||||||
|
FREAD_READS_DIRECTORIES=UnfortunatelyYes \
|
||||||
|
CSPRNG_METHOD=
|
||||||
|
}
|
||||||
|
|
||||||
|
bundle_git_manpages() {
|
||||||
|
require_path "$GIT_SRC_DIR/Documentation"
|
||||||
|
|
||||||
|
log "Bundling full Git manpage sources"
|
||||||
|
mkdir -p "$ANDROID_ASSET_MANPAGE_DIR"
|
||||||
|
find "$ANDROID_ASSET_MANPAGE_DIR" -type f -name '*.txt' -delete
|
||||||
|
while IFS= read -r manpage_source; do
|
||||||
|
local manpage_name
|
||||||
|
manpage_name="$(basename "$manpage_source")"
|
||||||
|
cp "$manpage_source" "$ANDROID_ASSET_MANPAGE_DIR/${manpage_name%.*}.txt"
|
||||||
|
done < <(find "$GIT_SRC_DIR/Documentation" -maxdepth 1 -type f \( -name 'git*.txt' -o -name 'git*.adoc' -o -name 'gitignore.txt' -o -name 'gitignore.adoc' \))
|
||||||
|
}
|
||||||
|
|
||||||
|
build_host_git() {
|
||||||
|
ensure_git_source
|
||||||
|
bundle_git_manpages
|
||||||
|
|
||||||
|
log "Building Git for development host"
|
||||||
|
cd "$GIT_SRC_DIR"
|
||||||
|
make clean >/dev/null 2>&1 || true
|
||||||
|
mapfile -t make_args < <(common_git_make_args)
|
||||||
|
make -j"$(nproc 2>/dev/null || printf 4)" "${make_args[@]}" git
|
||||||
|
|
||||||
|
mkdir -p "$HOST_GIT_DIR"
|
||||||
|
cp git "$HOST_GIT_BINARY"
|
||||||
|
chmod 755 "$HOST_GIT_BINARY"
|
||||||
|
|
||||||
|
log "Host test Git binary: $HOST_GIT_BINARY"
|
||||||
|
"$HOST_GIT_BINARY" --version
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
}
|
||||||
|
|
||||||
|
build_android_git_for_abi() {
|
||||||
|
local abi="$1"
|
||||||
|
local cc="$2"
|
||||||
|
local output_dir="$ANDROID_JNI_DIR/$abi"
|
||||||
|
|
||||||
|
require_path "$ANDROID_TOOLBIN/$cc"
|
||||||
|
|
||||||
|
log "Building Git for Android $abi"
|
||||||
|
cd "$GIT_SRC_DIR"
|
||||||
|
make clean >/dev/null 2>&1 || true
|
||||||
|
mapfile -t make_args < <(common_git_make_args)
|
||||||
|
make -j"$(nproc 2>/dev/null || printf 4)" \
|
||||||
|
uname_S=Android \
|
||||||
|
uname_O=Android \
|
||||||
|
NO_PTHREADS=YesPlease \
|
||||||
|
NO_LIBGEN_H=YesPlease \
|
||||||
|
HAVE_DEV_TTY=YesPlease \
|
||||||
|
CC="$cc" \
|
||||||
|
AR=llvm-ar \
|
||||||
|
RANLIB=llvm-ranlib \
|
||||||
|
STRIP=llvm-strip \
|
||||||
|
"${make_args[@]}" \
|
||||||
|
git
|
||||||
|
|
||||||
|
log "Validating Android $abi binary"
|
||||||
|
file git
|
||||||
|
readelf -h git | sed -n '1,12p'
|
||||||
|
|
||||||
|
mkdir -p "$output_dir"
|
||||||
|
llvm-strip -s git -o "$output_dir/libgit.so"
|
||||||
|
chmod 755 "$output_dir/libgit.so"
|
||||||
|
ls -lh "$output_dir/libgit.so"
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
}
|
||||||
|
|
||||||
|
build_android_git() {
|
||||||
|
ensure_git_source
|
||||||
|
bundle_git_manpages
|
||||||
|
require_path "$ANDROID_NDK_DIR"
|
||||||
|
export PATH="$ANDROID_TOOLBIN:$PATH"
|
||||||
|
|
||||||
|
build_android_git_for_abi "arm64-v8a" "aarch64-linux-android${ANDROID_API}-clang"
|
||||||
|
build_android_git_for_abi "armeabi-v7a" "armv7a-linux-androideabi${ANDROID_API}-clang"
|
||||||
|
build_android_git_for_abi "x86" "i686-linux-android${ANDROID_API}-clang"
|
||||||
|
build_android_git_for_abi "x86_64" "x86_64-linux-android${ANDROID_API}-clang"
|
||||||
|
}
|
||||||
|
|
||||||
|
build_all_git_targets() {
|
||||||
|
build_host_git
|
||||||
|
build_android_git
|
||||||
|
}
|
||||||
|
|
||||||
ensure_sdk_packages() {
|
ensure_sdk_packages() {
|
||||||
setup_env
|
setup_env
|
||||||
|
|
||||||
@@ -302,6 +430,7 @@ maybe_run_operation() {
|
|||||||
local should_bump_version="false"
|
local should_bump_version="false"
|
||||||
local should_auto_commit="false"
|
local should_auto_commit="false"
|
||||||
local should_compile_host_git="false"
|
local should_compile_host_git="false"
|
||||||
|
local should_bundle_manpages="false"
|
||||||
|
|
||||||
case "$mode" in
|
case "$mode" in
|
||||||
--build)
|
--build)
|
||||||
@@ -311,14 +440,7 @@ maybe_run_operation() {
|
|||||||
artifact_target="$PROJECT_DIR/app/build/outputs/apk/debug/githug-android-debug.apk"
|
artifact_target="$PROJECT_DIR/app/build/outputs/apk/debug/githug-android-debug.apk"
|
||||||
should_bump_version="true"
|
should_bump_version="true"
|
||||||
should_auto_commit="true"
|
should_auto_commit="true"
|
||||||
;;
|
should_bundle_manpages="true"
|
||||||
--build-aab)
|
|
||||||
gradle_task="bundleDebug"
|
|
||||||
artifact_label="debug AAB"
|
|
||||||
artifact_source="$PROJECT_DIR/app/build/outputs/bundle/debug/app-debug.aab"
|
|
||||||
artifact_target="$PROJECT_DIR/app/build/outputs/bundle/debug/githug-android-debug.aab"
|
|
||||||
should_bump_version="true"
|
|
||||||
should_auto_commit="true"
|
|
||||||
;;
|
;;
|
||||||
--build-release-aab)
|
--build-release-aab)
|
||||||
gradle_task="bundleRelease"
|
gradle_task="bundleRelease"
|
||||||
@@ -327,6 +449,7 @@ maybe_run_operation() {
|
|||||||
artifact_target="$PROJECT_DIR/app/build/outputs/bundle/release/githug-android-release.aab"
|
artifact_target="$PROJECT_DIR/app/build/outputs/bundle/release/githug-android-release.aab"
|
||||||
should_bump_version="true"
|
should_bump_version="true"
|
||||||
should_auto_commit="true"
|
should_auto_commit="true"
|
||||||
|
should_bundle_manpages="true"
|
||||||
;;
|
;;
|
||||||
--test)
|
--test)
|
||||||
gradle_task="testDebugUnitTest"
|
gradle_task="testDebugUnitTest"
|
||||||
@@ -334,7 +457,7 @@ maybe_run_operation() {
|
|||||||
should_compile_host_git="true"
|
should_compile_host_git="true"
|
||||||
;;
|
;;
|
||||||
--compile-git)
|
--compile-git)
|
||||||
"$PROJECT_DIR/CompileGitForAllTargetPlatforms.sh" --all
|
build_all_git_targets
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -347,9 +470,13 @@ maybe_run_operation() {
|
|||||||
bump_android_version
|
bump_android_version
|
||||||
fi
|
fi
|
||||||
if [ "$should_compile_host_git" = "true" ]; then
|
if [ "$should_compile_host_git" = "true" ]; then
|
||||||
"$PROJECT_DIR/CompileGitForAllTargetPlatforms.sh" --host
|
build_host_git
|
||||||
export GITHUG_TEST_GIT_BINARY="$HOST_GIT_BINARY"
|
export GITHUG_TEST_GIT_BINARY="$HOST_GIT_BINARY"
|
||||||
fi
|
fi
|
||||||
|
if [ "$should_bundle_manpages" = "true" ]; then
|
||||||
|
ensure_git_source
|
||||||
|
bundle_git_manpages
|
||||||
|
fi
|
||||||
|
|
||||||
log "Running $artifact_label with --no-daemon"
|
log "Running $artifact_label with --no-daemon"
|
||||||
"$PROJECT_DIR/gradlew" --no-daemon "$gradle_task"
|
"$PROJECT_DIR/gradlew" --no-daemon "$gradle_task"
|
||||||
@@ -371,10 +498,9 @@ maybe_run_operation() {
|
|||||||
|
|
||||||
print_usage() {
|
print_usage() {
|
||||||
cat <<EOF_USAGE
|
cat <<EOF_USAGE
|
||||||
Usage: bash ./AndroidProjectTooling.sh [--build | --build-aab | --build-release-aab | --test | --compile-git]
|
Usage: bash ./AndroidProjectTooling.sh [--build | --build-release-aab | --test | --compile-git]
|
||||||
|
|
||||||
--build Set up the environment and build the debug APK
|
--build Set up the environment and build the debug APK
|
||||||
--build-aab Set up the environment and build the debug Android App Bundle (AAB)
|
|
||||||
--build-release-aab Set up the environment and build a release Android App Bundle (AAB)
|
--build-release-aab Set up the environment and build a release Android App Bundle (AAB)
|
||||||
--test Set up the environment, compile host Git, and run the debug JVM unit tests with it
|
--test Set up the environment, compile host Git, and run the debug JVM unit tests with it
|
||||||
--compile-git Compile Git for the development host and all Android target ABIs
|
--compile-git Compile Git for the development host and all Android target ABIs
|
||||||
@@ -383,7 +509,7 @@ EOF_USAGE
|
|||||||
|
|
||||||
validate_args() {
|
validate_args() {
|
||||||
case "${1:-}" in
|
case "${1:-}" in
|
||||||
""|--build|--build-aab|--build-release-aab|--test|--compile-git)
|
""|--build|--build-release-aab|--test|--compile-git)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown argument: $1" >&2
|
echo "Unknown argument: $1" >&2
|
||||||
@@ -405,6 +531,7 @@ main() {
|
|||||||
require_tool clang
|
require_tool clang
|
||||||
require_tool pkg-config
|
require_tool pkg-config
|
||||||
require_tool readelf
|
require_tool readelf
|
||||||
|
require_tool file
|
||||||
|
|
||||||
ensure_dir "$TMP_DIR"
|
ensure_dir "$TMP_DIR"
|
||||||
ensure_dir "$SDK_DIR"
|
ensure_dir "$SDK_DIR"
|
||||||
@@ -426,7 +553,6 @@ main() {
|
|||||||
log "To compile Git for host and Android ABIs: bash ./AndroidProjectTooling.sh --compile-git"
|
log "To compile Git for host and Android ABIs: bash ./AndroidProjectTooling.sh --compile-git"
|
||||||
log "To build without a background Gradle daemon: ./gradlew --no-daemon assembleDebug"
|
log "To build without a background Gradle daemon: ./gradlew --no-daemon assembleDebug"
|
||||||
log "To set up and build in one step: bash ./AndroidProjectTooling.sh --build"
|
log "To set up and build in one step: bash ./AndroidProjectTooling.sh --build"
|
||||||
log "To set up and build a debug AAB in one step: bash ./AndroidProjectTooling.sh --build-aab"
|
|
||||||
log "To set up and build a release AAB in one step: bash ./AndroidProjectTooling.sh --build-release-aab"
|
log "To set up and build a release AAB in one step: bash ./AndroidProjectTooling.sh --build-release-aab"
|
||||||
log "To set up and run unit tests with compiled host Git: bash ./AndroidProjectTooling.sh --test"
|
log "To set up and run unit tests with compiled host Git: bash ./AndroidProjectTooling.sh --test"
|
||||||
}
|
}
|
||||||
|
|||||||
33
README.md
33
README.md
@@ -11,7 +11,7 @@ The app is organized around GitHug parity rather than simplified command quizzes
|
|||||||
- Each level file documents the intended repository setup, evaluation strategy, hints, command suggestions, and embedded solution scenarios.
|
- Each level file documents the intended repository setup, evaluation strategy, hints, command suggestions, and embedded solution scenarios.
|
||||||
- Validators prefer repository state and Git objects over raw command text. Direct command-answer validation is reserved for upstream answer-style levels such as identifying a hash, filename, remote URL, author, or count.
|
- Validators prefer repository state and Git objects over raw command text. Direct command-answer validation is reserved for upstream answer-style levels such as identifying a hash, filename, remote URL, author, or count.
|
||||||
- Shared tests execute the embedded solution scenarios for every level and assert that the Android catalog still matches the upstream level order.
|
- Shared tests execute the embedded solution scenarios for every level and assert that the Android catalog still matches the upstream level order.
|
||||||
- The runtime prepares an isolated sandbox per level. When a bundled native Git binary is present, Git commands run against real repository directories; otherwise the Kotlin fallback engine keeps development and tests deterministic.
|
- The runtime prepares an isolated sandbox per level and requires a bundled native Git binary for the device ABI. If no native Git binary is available, the app shows an unavailable-build message instead of starting a playable session.
|
||||||
|
|
||||||
The UI supports a terminal-centered workflow with optional inspection panes:
|
The UI supports a terminal-centered workflow with optional inspection panes:
|
||||||
|
|
||||||
@@ -46,7 +46,6 @@ Available commands:
|
|||||||
| `bash ./AndroidProjectTooling.sh` | Provision or refresh the local Android/JDK toolchain only. | Toolchain under `./jdk` and `./android-sdk` |
|
| `bash ./AndroidProjectTooling.sh` | Provision or refresh the local Android/JDK toolchain only. | Toolchain under `./jdk` and `./android-sdk` |
|
||||||
| `bash ./AndroidProjectTooling.sh --test` | Compile host Git, set `GITHUG_TEST_GIT_BINARY`, and run JVM unit tests. | Test reports under `app/build/reports/` |
|
| `bash ./AndroidProjectTooling.sh --test` | Compile host Git, set `GITHUG_TEST_GIT_BINARY`, and run JVM unit tests. | Test reports under `app/build/reports/` |
|
||||||
| `bash ./AndroidProjectTooling.sh --build` | Build the debug APK. | `app/build/outputs/apk/debug/githug-android-debug.apk` |
|
| `bash ./AndroidProjectTooling.sh --build` | Build the debug APK. | `app/build/outputs/apk/debug/githug-android-debug.apk` |
|
||||||
| `bash ./AndroidProjectTooling.sh --build-aab` | Build the debug Android App Bundle. | `app/build/outputs/bundle/debug/githug-android-debug.aab` |
|
|
||||||
| `bash ./AndroidProjectTooling.sh --build-release-aab` | Build the release Android App Bundle. | `app/build/outputs/bundle/release/githug-android-release.aab` |
|
| `bash ./AndroidProjectTooling.sh --build-release-aab` | Build the release Android App Bundle. | `app/build/outputs/bundle/release/githug-android-release.aab` |
|
||||||
| `bash ./AndroidProjectTooling.sh --compile-git` | Compile Git for the development host and all Android target ABIs. | Host and Android `libgit.so` binaries |
|
| `bash ./AndroidProjectTooling.sh --compile-git` | Compile Git for the development host and all Android target ABIs. | Host and Android `libgit.so` binaries |
|
||||||
|
|
||||||
@@ -60,7 +59,6 @@ To build installable/debuggable artifacts:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash ./AndroidProjectTooling.sh --build
|
bash ./AndroidProjectTooling.sh --build
|
||||||
bash ./AndroidProjectTooling.sh --build-aab
|
|
||||||
```
|
```
|
||||||
|
|
||||||
To build the release AAB intended for Play Store style distribution work:
|
To build the release AAB intended for Play Store style distribution work:
|
||||||
@@ -77,34 +75,33 @@ To avoid repeated expensive SDK verification, the script writes a small state fi
|
|||||||
|
|
||||||
If all required components were verified successfully, the script will skip SDK verification/reinstallation for the next **24 hours** unless required directories are missing.
|
If all required components were verified successfully, the script will skip SDK verification/reinstallation for the next **24 hours** unless required directories are missing.
|
||||||
|
|
||||||
When `--build`, `--build-aab`, or `--build-release-aab` is used, the script also:
|
When `--build` or `--build-release-aab` is used, the script also:
|
||||||
|
|
||||||
- increments `versionCode` by 1
|
- increments `versionCode` by 1
|
||||||
- increments the patch component of `versionName`, for example `0.1.0` to `0.1.1`
|
- increments the patch component of `versionName`, for example `0.1.0` to `0.1.1`
|
||||||
|
- bundles full Git manpage source files from Git's `Documentation/` directory into app assets
|
||||||
- renames the generated artifact to a stable `githug-android-*` filename
|
- renames the generated artifact to a stable `githug-android-*` filename
|
||||||
- attempts to create a git commit after a successful build if there are source changes
|
- attempts to create a git commit after a successful build if there are source changes
|
||||||
|
|
||||||
The build commands currently run these Gradle tasks:
|
The build commands currently run these Gradle tasks:
|
||||||
|
|
||||||
- `--build`: `assembleDebug`
|
- `--build`: `assembleDebug`
|
||||||
- `--build-aab`: `bundleDebug`
|
|
||||||
- `--build-release-aab`: `bundleRelease`
|
- `--build-release-aab`: `bundleRelease`
|
||||||
|
|
||||||
## Git Binary Compilation
|
## Git Binary Compilation
|
||||||
|
|
||||||
Native Git is compiled with:
|
Native Git compilation is integrated into the root tooling script:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash ./CompileGitForAllTargetPlatforms.sh [--host | --android | --all]
|
bash ./AndroidProjectTooling.sh --compile-git
|
||||||
```
|
```
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
| Command | Purpose | Output |
|
| Command | Purpose | Output |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `bash ./CompileGitForAllTargetPlatforms.sh --host` | Compile Git for the development machine. | `build/host-git/libgit.so` |
|
| `bash ./AndroidProjectTooling.sh --test` | Compile Git for the development machine, then run tests with it. | `build/host-git/libgit.so` and test reports |
|
||||||
| `bash ./CompileGitForAllTargetPlatforms.sh --android` | Cross-compile Git for Android ABIs served by Google Play. | `app/src/main/jniLibs/<abi>/libgit.so` |
|
| `bash ./AndroidProjectTooling.sh --compile-git` | Compile host Git and cross-compile Android ABIs served by Google Play. | Host and Android outputs |
|
||||||
| `bash ./CompileGitForAllTargetPlatforms.sh --all` | Compile both host and Android targets. This is the default. | Host and Android outputs |
|
|
||||||
|
|
||||||
Android ABI outputs:
|
Android ABI outputs:
|
||||||
|
|
||||||
@@ -113,22 +110,17 @@ Android ABI outputs:
|
|||||||
- `app/src/main/jniLibs/x86/libgit.so`
|
- `app/src/main/jniLibs/x86/libgit.so`
|
||||||
- `app/src/main/jniLibs/x86_64/libgit.so`
|
- `app/src/main/jniLibs/x86_64/libgit.so`
|
||||||
|
|
||||||
The `--test` tooling command automatically runs `CompileGitForAllTargetPlatforms.sh --host` first and exports `GITHUG_TEST_GIT_BINARY=build/host-git/libgit.so`. This keeps JVM tests on the same `GitRepositoryRuntime` path as the app, including the packaged-runtime helper resolution behavior.
|
The `--test` tooling command automatically builds host Git first and exports `GITHUG_TEST_GIT_BINARY=build/host-git/libgit.so`. This keeps JVM tests on the same `GitRepositoryRuntime` path as the app, including the packaged-runtime helper resolution behavior.
|
||||||
|
|
||||||
The `--compile-git` tooling command is a convenience wrapper for:
|
Git manpage assets are also refreshed from the checked-out Git source whenever Git is compiled or an app artifact is built.
|
||||||
|
|
||||||
```bash
|
|
||||||
bash ./CompileGitForAllTargetPlatforms.sh --all
|
|
||||||
```
|
|
||||||
|
|
||||||
## Runtime Architecture
|
## Runtime Architecture
|
||||||
|
|
||||||
The command engine has two execution paths behind one app-facing runtime:
|
The command engine has one app-facing runtime:
|
||||||
|
|
||||||
- **Native Git path**: if the packaged executable is present for the device ABI, Git commands execute in a real per-level repository sandbox in app-private storage.
|
- **Native Git path**: the packaged executable for the device ABI runs Git commands in a real per-level repository sandbox in app-private storage.
|
||||||
- **Kotlin fallback path**: the in-memory sandbox engine mirrors the same observable repository facts for development, JVM tests, and environments without a bundled native Git binary.
|
|
||||||
|
|
||||||
Both paths expose the same `RepoState` surface to validators. In addition to files, commits, branches, tags, remotes, and config, the model tracks learning-relevant effects such as stashes, fetched remote refs, pushed branches/tags, submodules, and repository maintenance actions.
|
The runtime exposes a `RepoState` surface to validators. In addition to files, commits, branches, tags, remotes, and config, the model tracks learning-relevant effects such as stashes, fetched remote refs, pushed branches/tags, submodules, and repository maintenance actions.
|
||||||
|
|
||||||
Helper shell-like commands (`ls`, `pwd`, `cat`, `touch`, `mkdir`, `rm`, `echo`, `cd`) remain implemented in Kotlin so the mobile terminal behaves consistently across devices.
|
Helper shell-like commands (`ls`, `pwd`, `cat`, `touch`, `mkdir`, `rm`, `echo`, `cd`) remain implemented in Kotlin so the mobile terminal behaves consistently across devices.
|
||||||
|
|
||||||
@@ -149,5 +141,4 @@ Current work is focused on:
|
|||||||
|
|
||||||
- improving parity with upstream Ruby Githug setup and validation semantics
|
- improving parity with upstream Ruby Githug setup and validation semantics
|
||||||
- expanding native-Git-backed behavior across complex repository workflows
|
- expanding native-Git-backed behavior across complex repository workflows
|
||||||
- preserving robust fallback tests for every level
|
|
||||||
- improving onboarding, accessibility, UI polish, icons, and Play Store readiness
|
- improving onboarding, accessibility, UI polish, icons, and Play Store readiness
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ android {
|
|||||||
applicationId = "solutions.tretter.githugandroid"
|
applicationId = "solutions.tretter.githugandroid"
|
||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 128
|
versionCode = 129
|
||||||
versionName = "0.1.127"
|
versionName = "0.1.128"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
|
|||||||
460
app/src/main/assets/manpages/git-add.txt
Normal file
460
app/src/main/assets/manpages/git-add.txt
Normal file
@@ -0,0 +1,460 @@
|
|||||||
|
git-add(1)
|
||||||
|
==========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-add - Add file contents to the index
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
|
||||||
|
[--edit | -e] [--[no-]all | -A | --[no-]ignore-removal | [--update | -u]] [--sparse]
|
||||||
|
[--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
|
||||||
|
[--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
|
||||||
|
[--] [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Add contents of new or changed files to the index. The "index" (also
|
||||||
|
known as the "staging area") is what you use to prepare the contents of
|
||||||
|
the next commit.
|
||||||
|
|
||||||
|
When you run `git commit` without any other arguments, it will only
|
||||||
|
commit staged changes. For example, if you've edited `file.c` and want
|
||||||
|
to commit your changes to that file, you can run:
|
||||||
|
|
||||||
|
git add file.c
|
||||||
|
git commit
|
||||||
|
|
||||||
|
You can also add only part of your changes to a file with `git add -p`.
|
||||||
|
|
||||||
|
This command can be performed multiple times before a commit. It only
|
||||||
|
adds the content of the specified file(s) at the time the add command is
|
||||||
|
run; if you want subsequent changes included in the next commit, then
|
||||||
|
you must run `git add` again to add the new content to the index.
|
||||||
|
|
||||||
|
The `git status` command can be used to obtain a summary of which
|
||||||
|
files have changes that are staged for the next commit.
|
||||||
|
|
||||||
|
The `git add` command will not add ignored files by default. You can
|
||||||
|
use the `--force` option to add ignored files. If you specify the exact
|
||||||
|
filename of an ignored file, `git add` will fail with a list of ignored
|
||||||
|
files. Otherwise it will silently ignore the file.
|
||||||
|
|
||||||
|
Please see linkgit:git-commit[1] for alternative ways to add content to a
|
||||||
|
commit.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`<pathspec>...`::
|
||||||
|
Files to add content from. Fileglobs (e.g. `*.c`) can
|
||||||
|
be given to add all matching files. Also a
|
||||||
|
leading directory name (e.g. `dir` to add `dir/file1`
|
||||||
|
and `dir/file2`) can be given to update the index to
|
||||||
|
match the current state of the directory as a whole (e.g.
|
||||||
|
specifying `dir` will record not just a file `dir/file1`
|
||||||
|
modified in the working tree, a file `dir/file2` added to
|
||||||
|
the working tree, but also a file `dir/file3` removed from
|
||||||
|
the working tree). Note that older versions of Git used
|
||||||
|
to ignore removed files; use `--no-all` option if you want
|
||||||
|
to add modified or new files but ignore removed ones.
|
||||||
|
+
|
||||||
|
For more details about the _<pathspec>_ syntax, see the 'pathspec' entry
|
||||||
|
in linkgit:gitglossary[7].
|
||||||
|
|
||||||
|
`-n`::
|
||||||
|
`--dry-run`::
|
||||||
|
Don't actually add the file(s), just show if they exist and/or will
|
||||||
|
be ignored.
|
||||||
|
|
||||||
|
`-v`::
|
||||||
|
`--verbose`::
|
||||||
|
Be verbose.
|
||||||
|
|
||||||
|
`-f`::
|
||||||
|
`--force`::
|
||||||
|
Allow adding otherwise ignored files. The option is also used when
|
||||||
|
`submodule.<name>.ignore=all` is set, but you want to stage an
|
||||||
|
update of the submodule. The `path` to the submodule must be explicitly
|
||||||
|
specified.
|
||||||
|
|
||||||
|
`--sparse`::
|
||||||
|
Allow updating index entries outside of the sparse-checkout cone.
|
||||||
|
Normally, `git add` refuses to update index entries whose paths do
|
||||||
|
not fit within the sparse-checkout cone, since those files might
|
||||||
|
be removed from the working tree without warning. See
|
||||||
|
linkgit:git-sparse-checkout[1] for more details.
|
||||||
|
|
||||||
|
`-i`::
|
||||||
|
`--interactive`::
|
||||||
|
Add modified contents in the working tree interactively to
|
||||||
|
the index. Optional path arguments may be supplied to limit
|
||||||
|
operation to a subset of the working tree. See ``Interactive
|
||||||
|
mode'' for details.
|
||||||
|
|
||||||
|
`-p`::
|
||||||
|
`--patch`::
|
||||||
|
Interactively choose hunks of patch between the index and the
|
||||||
|
work tree and add them to the index. This gives the user a chance
|
||||||
|
to review the difference before adding modified contents to the
|
||||||
|
index.
|
||||||
|
+
|
||||||
|
This effectively runs `add --interactive`, but bypasses the
|
||||||
|
initial command menu and directly jumps to the `patch` subcommand.
|
||||||
|
See ``Interactive mode'' for details.
|
||||||
|
|
||||||
|
include::diff-context-options.adoc[]
|
||||||
|
|
||||||
|
`-e`::
|
||||||
|
`--edit`::
|
||||||
|
Open the diff vs. the index in an editor and let the user
|
||||||
|
edit it. After the editor was closed, adjust the hunk headers
|
||||||
|
and apply the patch to the index.
|
||||||
|
+
|
||||||
|
The intent of this option is to pick and choose lines of the patch to
|
||||||
|
apply, or even to modify the contents of lines to be staged. This can be
|
||||||
|
quicker and more flexible than using the interactive hunk selector.
|
||||||
|
However, it is easy to confuse oneself and create a patch that does not
|
||||||
|
apply to the index. See EDITING PATCHES below.
|
||||||
|
|
||||||
|
`-u`::
|
||||||
|
`--update`::
|
||||||
|
Update the index just where it already has an entry matching
|
||||||
|
_<pathspec>_. This removes as well as modifies index entries to
|
||||||
|
match the working tree, but adds no new files.
|
||||||
|
+
|
||||||
|
If no _<pathspec>_ is given when `-u` option is used, all
|
||||||
|
tracked files in the entire working tree are updated (old versions
|
||||||
|
of Git used to limit the update to the current directory and its
|
||||||
|
subdirectories).
|
||||||
|
|
||||||
|
`-A`::
|
||||||
|
`--all`::
|
||||||
|
`--no-ignore-removal`::
|
||||||
|
Update the index not only where the working tree has a file
|
||||||
|
matching _<pathspec>_ but also where the index already has an
|
||||||
|
entry. This adds, modifies, and removes index entries to
|
||||||
|
match the working tree.
|
||||||
|
+
|
||||||
|
If no _<pathspec>_ is given when `-A` option is used, all
|
||||||
|
files in the entire working tree are updated (old versions
|
||||||
|
of Git used to limit the update to the current directory and its
|
||||||
|
subdirectories).
|
||||||
|
|
||||||
|
`--no-all`::
|
||||||
|
`--ignore-removal`::
|
||||||
|
Update the index by adding new files that are unknown to the
|
||||||
|
index and files modified in the working tree, but ignore
|
||||||
|
files that have been removed from the working tree. This
|
||||||
|
option is a no-op when no _<pathspec>_ is used.
|
||||||
|
+
|
||||||
|
This option is primarily to help users who are used to older
|
||||||
|
versions of Git, whose `git add <pathspec>...` was a synonym
|
||||||
|
for `git add --no-all <pathspec>...`, i.e. ignored removed files.
|
||||||
|
|
||||||
|
`-N`::
|
||||||
|
`--intent-to-add`::
|
||||||
|
Record only the fact that the path will be added later. An entry
|
||||||
|
for the path is placed in the index with no content. This is
|
||||||
|
useful for, among other things, showing the unstaged content of
|
||||||
|
such files with `git diff` and committing them with `git commit
|
||||||
|
-a`.
|
||||||
|
|
||||||
|
`--refresh`::
|
||||||
|
Don't add the file(s), but only refresh their stat()
|
||||||
|
information in the index.
|
||||||
|
|
||||||
|
`--ignore-errors`::
|
||||||
|
If some files could not be added because of errors indexing
|
||||||
|
them, do not abort the operation, but continue adding the
|
||||||
|
others. The command shall still exit with non-zero status.
|
||||||
|
The configuration variable `add.ignoreErrors` can be set to
|
||||||
|
true to make this the default behaviour.
|
||||||
|
|
||||||
|
`--ignore-missing`::
|
||||||
|
This option can only be used together with `--dry-run`. By using
|
||||||
|
this option the user can check if any of the given files would
|
||||||
|
be ignored, no matter if they are already present in the work
|
||||||
|
tree or not.
|
||||||
|
|
||||||
|
`--no-warn-embedded-repo`::
|
||||||
|
By default, `git add` will warn when adding an embedded
|
||||||
|
repository to the index without using `git submodule add` to
|
||||||
|
create an entry in `.gitmodules`. This option will suppress the
|
||||||
|
warning (e.g., if you are manually performing operations on
|
||||||
|
submodules).
|
||||||
|
|
||||||
|
`--renormalize`::
|
||||||
|
Apply the "clean" process freshly to all tracked files to
|
||||||
|
forcibly add them again to the index. This is useful after
|
||||||
|
changing `core.autocrlf` configuration or the `text` attribute
|
||||||
|
in order to correct files added with wrong _CRLF/LF_ line endings.
|
||||||
|
This option implies `-u`. Lone CR characters are untouched, thus
|
||||||
|
while a _CRLF_ cleans to _LF_, a _CRCRLF_ sequence is only partially
|
||||||
|
cleaned to _CRLF_.
|
||||||
|
|
||||||
|
`--chmod=(+|-)x`::
|
||||||
|
Override the executable bit of the added files. The executable
|
||||||
|
bit is only changed in the index, the files on disk are left
|
||||||
|
unchanged.
|
||||||
|
|
||||||
|
`--pathspec-from-file=<file>`::
|
||||||
|
Pathspec is passed in _<file>_ instead of commandline args. If
|
||||||
|
_<file>_ is exactly `-` then standard input is used. Pathspec
|
||||||
|
elements are separated by _LF_ or _CR/LF_. Pathspec elements can be
|
||||||
|
quoted as explained for the configuration variable `core.quotePath`
|
||||||
|
(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
|
||||||
|
global `--literal-pathspecs`.
|
||||||
|
|
||||||
|
`--pathspec-file-nul`::
|
||||||
|
Only meaningful with `--pathspec-from-file`. Pathspec elements are
|
||||||
|
separated with _NUL_ character and all other characters are taken
|
||||||
|
literally (including newlines and quotes).
|
||||||
|
|
||||||
|
`--`::
|
||||||
|
This option can be used to separate command-line options from
|
||||||
|
the list of files, (useful when filenames might be mistaken
|
||||||
|
for command-line options).
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Adds content from all ++*.txt++ files under `Documentation` directory
|
||||||
|
and its subdirectories:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git add Documentation/\*.txt
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
Note that the asterisk ++*++ is quoted from the shell in this
|
||||||
|
example; this lets the command include the files from
|
||||||
|
subdirectories of `Documentation/` directory.
|
||||||
|
|
||||||
|
* Considers adding content from all ++git-*.sh++ scripts:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git add git-*.sh
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
Because this example lets the shell expand the asterisk (i.e. you are
|
||||||
|
listing the files explicitly), it does not consider
|
||||||
|
`subdir/git-foo.sh`.
|
||||||
|
|
||||||
|
INTERACTIVE MODE
|
||||||
|
----------------
|
||||||
|
When the command enters the interactive mode, it shows the
|
||||||
|
output of the 'status' subcommand, and then goes into its
|
||||||
|
interactive command loop.
|
||||||
|
|
||||||
|
The command loop shows the list of subcommands available, and
|
||||||
|
gives a prompt "What now> ". In general, when the prompt ends
|
||||||
|
with a single '>', you can pick only one of the choices given
|
||||||
|
and type return, like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
*** Commands ***
|
||||||
|
1: status 2: update 3: revert 4: add untracked
|
||||||
|
5: patch 6: diff 7: quit 8: help
|
||||||
|
What now> 1
|
||||||
|
------------
|
||||||
|
|
||||||
|
You also could say `s` or `sta` or `status` above as long as the
|
||||||
|
choice is unique.
|
||||||
|
|
||||||
|
The main command loop has 6 subcommands (plus help and quit).
|
||||||
|
|
||||||
|
status::
|
||||||
|
|
||||||
|
This shows the change between `HEAD` and index (i.e. what will be
|
||||||
|
committed if you say `git commit`), and between index and
|
||||||
|
working tree files (i.e. what you could stage further before
|
||||||
|
`git commit` using `git add`) for each path. A sample output
|
||||||
|
looks like this:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
staged unstaged path
|
||||||
|
1: binary nothing foo.png
|
||||||
|
2: +403/-35 +1/-1 add-interactive.c
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
It shows that `foo.png` has differences from `HEAD` (but that is
|
||||||
|
binary so line count cannot be shown) and there is no
|
||||||
|
difference between indexed copy and the working tree
|
||||||
|
version (if the working tree version were also different,
|
||||||
|
'binary' would have been shown in place of 'nothing'). The
|
||||||
|
other file, `add-interactive.c`, has 403 lines added
|
||||||
|
and 35 lines deleted if you commit what is in the index, but
|
||||||
|
working tree file has further modifications (one addition and
|
||||||
|
one deletion).
|
||||||
|
|
||||||
|
update::
|
||||||
|
|
||||||
|
This shows the status information and issues an "Update>>"
|
||||||
|
prompt. When the prompt ends with double '>>', you can
|
||||||
|
make more than one selection, concatenated with whitespace or
|
||||||
|
comma. Also you can say ranges. E.g. "2-5 7,9" to choose
|
||||||
|
2,3,4,5,7,9 from the list. If the second number in a range is
|
||||||
|
omitted, all remaining patches are taken. E.g. "7-" to choose
|
||||||
|
7,8,9 from the list. You can say '*' to choose everything.
|
||||||
|
+
|
||||||
|
What you chose are then highlighted with '*',
|
||||||
|
like this:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
staged unstaged path
|
||||||
|
1: binary nothing foo.png
|
||||||
|
* 2: +403/-35 +1/-1 add-interactive.c
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
To remove selection, prefix the input with `-`
|
||||||
|
like this:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
Update>> -2
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
After making the selection, answer with an empty line to stage the
|
||||||
|
contents of working tree files for selected paths in the index.
|
||||||
|
|
||||||
|
revert::
|
||||||
|
|
||||||
|
This has a very similar UI to 'update', and the staged
|
||||||
|
information for selected paths are reverted to that of the
|
||||||
|
HEAD version. Reverting new paths makes them untracked.
|
||||||
|
|
||||||
|
add untracked::
|
||||||
|
|
||||||
|
This has a very similar UI to 'update' and
|
||||||
|
'revert', and lets you add untracked paths to the index.
|
||||||
|
|
||||||
|
patch::
|
||||||
|
|
||||||
|
This lets you choose one path out of a 'status' like selection.
|
||||||
|
After choosing the path, it presents the diff between the index
|
||||||
|
and the working tree file and asks you if you want to stage
|
||||||
|
the change of each hunk. You can select one of the following
|
||||||
|
options and type return:
|
||||||
|
|
||||||
|
y - stage this hunk
|
||||||
|
n - do not stage this hunk
|
||||||
|
q - quit; do not stage this hunk or any of the remaining ones
|
||||||
|
a - stage this hunk and all later hunks in the file
|
||||||
|
d - do not stage this hunk or any of the later hunks in the file
|
||||||
|
g - select a hunk to go to
|
||||||
|
/ - search for a hunk matching the given regex
|
||||||
|
j - go to the next undecided hunk, roll over at the bottom
|
||||||
|
J - go to the next hunk, roll over at the bottom
|
||||||
|
k - go to the previous undecided hunk, roll over at the top
|
||||||
|
K - go to the previous hunk, roll over at the top
|
||||||
|
s - split the current hunk into smaller hunks
|
||||||
|
e - manually edit the current hunk
|
||||||
|
p - print the current hunk
|
||||||
|
P - print the current hunk using the pager
|
||||||
|
? - print help
|
||||||
|
+
|
||||||
|
After deciding the fate for all hunks, if there is any hunk
|
||||||
|
that was chosen, the index is updated with the selected hunks.
|
||||||
|
+
|
||||||
|
You can omit having to type return here, by setting the configuration
|
||||||
|
variable `interactive.singleKey` to `true`.
|
||||||
|
|
||||||
|
diff::
|
||||||
|
|
||||||
|
This lets you review what will be committed (i.e. between
|
||||||
|
`HEAD` and index).
|
||||||
|
|
||||||
|
|
||||||
|
EDITING PATCHES
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Invoking `git add -e` or selecting `e` from the interactive hunk
|
||||||
|
selector will open a patch in your editor; after the editor exits, the
|
||||||
|
result is applied to the index. You are free to make arbitrary changes
|
||||||
|
to the patch, but note that some changes may have confusing results, or
|
||||||
|
even result in a patch that cannot be applied. If you want to abort the
|
||||||
|
operation entirely (i.e., stage nothing new in the index), simply delete
|
||||||
|
all lines of the patch. The list below describes some common things you
|
||||||
|
may see in a patch, and which editing operations make sense on them.
|
||||||
|
|
||||||
|
--
|
||||||
|
added content::
|
||||||
|
|
||||||
|
Added content is represented by lines beginning with "{plus}". You can
|
||||||
|
prevent staging any addition lines by deleting them.
|
||||||
|
|
||||||
|
removed content::
|
||||||
|
|
||||||
|
Removed content is represented by lines beginning with "-". You can
|
||||||
|
prevent staging their removal by converting the "-" to a " " (space).
|
||||||
|
|
||||||
|
modified content::
|
||||||
|
|
||||||
|
Modified content is represented by "-" lines (removing the old content)
|
||||||
|
followed by "{plus}" lines (adding the replacement content). You can
|
||||||
|
prevent staging the modification by converting "-" lines to " ", and
|
||||||
|
removing "{plus}" lines. Beware that modifying only half of the pair is
|
||||||
|
likely to introduce confusing changes to the index.
|
||||||
|
--
|
||||||
|
|
||||||
|
There are also more complex operations that can be performed. But beware
|
||||||
|
that because the patch is applied only to the index and not the working
|
||||||
|
tree, the working tree will appear to "undo" the change in the index.
|
||||||
|
For example, introducing a new line into the index that is in neither
|
||||||
|
the `HEAD` nor the working tree will stage the new line for commit, but
|
||||||
|
the line will appear to be reverted in the working tree.
|
||||||
|
|
||||||
|
Avoid using these constructs, or do so with extreme caution.
|
||||||
|
|
||||||
|
--
|
||||||
|
removing untouched content::
|
||||||
|
|
||||||
|
Content which does not differ between the index and working tree may be
|
||||||
|
shown on context lines, beginning with a " " (space). You can stage
|
||||||
|
context lines for removal by converting the space to a "-". The
|
||||||
|
resulting working tree file will appear to re-add the content.
|
||||||
|
|
||||||
|
modifying existing content::
|
||||||
|
|
||||||
|
One can also modify context lines by staging them for removal (by
|
||||||
|
converting " " to "-") and adding a "{plus}" line with the new content.
|
||||||
|
Similarly, one can modify "{plus}" lines for existing additions or
|
||||||
|
modifications. In all cases, the new modification will appear reverted
|
||||||
|
in the working tree.
|
||||||
|
|
||||||
|
new content::
|
||||||
|
|
||||||
|
You may also add new content that does not exist in the patch; simply
|
||||||
|
add new lines, each starting with "{plus}". The addition will appear
|
||||||
|
reverted in the working tree.
|
||||||
|
--
|
||||||
|
|
||||||
|
There are also several operations which should be avoided entirely, as
|
||||||
|
they will make the patch impossible to apply:
|
||||||
|
|
||||||
|
* adding context (" ") or removal ("-") lines
|
||||||
|
* deleting context or removal lines
|
||||||
|
* modifying the contents of context or removal lines
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
:git-add: 1
|
||||||
|
include::config/add.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-status[1]
|
||||||
|
linkgit:git-rm[1]
|
||||||
|
linkgit:git-reset[1]
|
||||||
|
linkgit:git-mv[1]
|
||||||
|
linkgit:git-commit[1]
|
||||||
|
linkgit:git-update-index[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
316
app/src/main/assets/manpages/git-am.txt
Normal file
316
app/src/main/assets/manpages/git-am.txt
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
git-am(1)
|
||||||
|
=========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-am - Apply a series of patches from a mailbox
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git am' [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--[no-]verify]
|
||||||
|
[--[no-]3way] [--interactive] [--committer-date-is-author-date]
|
||||||
|
[--ignore-date] [--ignore-space-change | --ignore-whitespace]
|
||||||
|
[--whitespace=<action>] [-C<n>] [-p<n>] [--directory=<dir>]
|
||||||
|
[--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
|
||||||
|
[--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
|
||||||
|
[--quoted-cr=<action>]
|
||||||
|
[--empty=(stop|drop|keep)]
|
||||||
|
[(<mbox> | <Maildir>)...]
|
||||||
|
'git am' (--continue | --skip | --abort | --quit | --retry | --show-current-patch[=(diff|raw)] | --allow-empty)
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Splits mail messages in a mailbox into commit log messages,
|
||||||
|
authorship information, and patches, and applies them to the
|
||||||
|
current branch. You could think of it as a reverse operation
|
||||||
|
of linkgit:git-format-patch[1] run on a branch with a straight
|
||||||
|
history without merges.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
(<mbox>|<Maildir>)...::
|
||||||
|
The list of mailbox files to read patches from. If you do not
|
||||||
|
supply this argument, the command reads from the standard input.
|
||||||
|
If you supply directories, they will be treated as Maildirs.
|
||||||
|
|
||||||
|
-s::
|
||||||
|
--signoff::
|
||||||
|
Add a `Signed-off-by` trailer to the commit message (see
|
||||||
|
linkgit:git-interpret-trailers[1]), using the committer identity
|
||||||
|
of yourself. See the signoff option in linkgit:git-commit[1]
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
-k::
|
||||||
|
--keep::
|
||||||
|
Pass `-k` flag to linkgit:git-mailinfo[1].
|
||||||
|
|
||||||
|
--keep-non-patch::
|
||||||
|
Pass `-b` flag to linkgit:git-mailinfo[1].
|
||||||
|
|
||||||
|
--keep-cr::
|
||||||
|
--no-keep-cr::
|
||||||
|
With `--keep-cr`, call linkgit:git-mailsplit[1]
|
||||||
|
with the same option, to prevent it from stripping CR at the end of
|
||||||
|
lines. `am.keepcr` configuration variable can be used to specify the
|
||||||
|
default behaviour. `--no-keep-cr` is useful to override `am.keepcr`.
|
||||||
|
|
||||||
|
-c::
|
||||||
|
--scissors::
|
||||||
|
Remove everything in body before a scissors line (see
|
||||||
|
linkgit:git-mailinfo[1]). Can be activated by default using
|
||||||
|
the `mailinfo.scissors` configuration variable.
|
||||||
|
|
||||||
|
--no-scissors::
|
||||||
|
Ignore scissors lines (see linkgit:git-mailinfo[1]).
|
||||||
|
|
||||||
|
--quoted-cr=<action>::
|
||||||
|
This flag will be passed down to linkgit:git-mailinfo[1].
|
||||||
|
|
||||||
|
--empty=(drop|keep|stop)::
|
||||||
|
How to handle an e-mail message lacking a patch:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
`drop`;;
|
||||||
|
The e-mail message will be skipped.
|
||||||
|
`keep`;;
|
||||||
|
An empty commit will be created, with the contents of the e-mail
|
||||||
|
message as its log.
|
||||||
|
`stop`;;
|
||||||
|
The command will fail, stopping in the middle of the current `am`
|
||||||
|
session. This is the default behavior.
|
||||||
|
--
|
||||||
|
|
||||||
|
-m::
|
||||||
|
--message-id::
|
||||||
|
Pass the `-m` flag to linkgit:git-mailinfo[1],
|
||||||
|
so that the `Message-ID` header is added to the commit message.
|
||||||
|
The `am.messageid` configuration variable can be used to specify
|
||||||
|
the default behaviour.
|
||||||
|
|
||||||
|
--no-message-id::
|
||||||
|
Do not add the Message-ID header to the commit message.
|
||||||
|
`--no-message-id` is useful to override `am.messageid`.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Be quiet. Only print error messages.
|
||||||
|
|
||||||
|
-u::
|
||||||
|
--utf8::
|
||||||
|
Pass `-u` flag to linkgit:git-mailinfo[1].
|
||||||
|
The proposed commit log message taken from the e-mail
|
||||||
|
is re-coded into UTF-8 encoding (configuration variable
|
||||||
|
`i18n.commitEncoding` can be used to specify the project's
|
||||||
|
preferred encoding if it is not UTF-8).
|
||||||
|
+
|
||||||
|
This was optional in prior versions of git, but now it is the
|
||||||
|
default. You can use `--no-utf8` to override this.
|
||||||
|
|
||||||
|
--no-utf8::
|
||||||
|
Pass `-n` flag to linkgit:git-mailinfo[1].
|
||||||
|
|
||||||
|
-3::
|
||||||
|
--3way::
|
||||||
|
--no-3way::
|
||||||
|
When the patch does not apply cleanly, fall back on
|
||||||
|
3-way merge if the patch records the identity of blobs
|
||||||
|
it is supposed to apply to and we have those blobs
|
||||||
|
available locally. `--no-3way` can be used to override
|
||||||
|
am.threeWay configuration variable. For more information,
|
||||||
|
see am.threeWay in linkgit:git-config[1].
|
||||||
|
|
||||||
|
include::rerere-options.adoc[]
|
||||||
|
|
||||||
|
--ignore-space-change::
|
||||||
|
--ignore-whitespace::
|
||||||
|
--whitespace=<action>::
|
||||||
|
-C<n>::
|
||||||
|
-p<n>::
|
||||||
|
--directory=<dir>::
|
||||||
|
--exclude=<path>::
|
||||||
|
--include=<path>::
|
||||||
|
--reject::
|
||||||
|
These flags are passed to the linkgit:git-apply[1] program that
|
||||||
|
applies the patch.
|
||||||
|
+
|
||||||
|
Valid <action> for the `--whitespace` option are:
|
||||||
|
`nowarn`, `warn`, `fix`, `error`, and `error-all`.
|
||||||
|
|
||||||
|
--patch-format::
|
||||||
|
By default the command will try to detect the patch format
|
||||||
|
automatically. This option allows the user to bypass the automatic
|
||||||
|
detection and specify the patch format that the patch(es) should be
|
||||||
|
interpreted as. Valid formats are mbox, mboxrd,
|
||||||
|
stgit, stgit-series, and hg.
|
||||||
|
|
||||||
|
-i::
|
||||||
|
--interactive::
|
||||||
|
Run interactively.
|
||||||
|
|
||||||
|
--verify::
|
||||||
|
-n::
|
||||||
|
--no-verify::
|
||||||
|
Run the `pre-applypatch` and `applypatch-msg` hooks. This is the
|
||||||
|
default. Skip these hooks with `-n` or `--no-verify`. See also
|
||||||
|
linkgit:githooks[5].
|
||||||
|
+
|
||||||
|
Note that `post-applypatch` cannot be skipped.
|
||||||
|
|
||||||
|
--committer-date-is-author-date::
|
||||||
|
By default the command records the date from the e-mail
|
||||||
|
message as the commit author date, and uses the time of
|
||||||
|
commit creation as the committer date. This allows the
|
||||||
|
user to lie about the committer date by using the same
|
||||||
|
value as the author date.
|
||||||
|
+
|
||||||
|
WARNING: The history walking machinery assumes that commits have
|
||||||
|
non-decreasing commit timestamps. You should consider if you really need
|
||||||
|
to use this option. Then you should only use this option to override the
|
||||||
|
committer date when applying commits on top of a base which commit is
|
||||||
|
older (in terms of the commit date) than the oldest patch you are
|
||||||
|
applying.
|
||||||
|
|
||||||
|
--ignore-date::
|
||||||
|
By default the command records the date from the e-mail
|
||||||
|
message as the commit author date, and uses the time of
|
||||||
|
commit creation as the committer date. This allows the
|
||||||
|
user to lie about the author date by using the same
|
||||||
|
value as the committer date.
|
||||||
|
|
||||||
|
--skip::
|
||||||
|
Skip the current patch. This is only meaningful when
|
||||||
|
restarting an aborted patch.
|
||||||
|
|
||||||
|
-S[<keyid>]::
|
||||||
|
--gpg-sign[=<keyid>]::
|
||||||
|
--no-gpg-sign::
|
||||||
|
GPG-sign commits. The `keyid` argument is optional and
|
||||||
|
defaults to the committer identity; if specified, it must be
|
||||||
|
stuck to the option without a space. `--no-gpg-sign` is useful to
|
||||||
|
countermand both `commit.gpgSign` configuration variable, and
|
||||||
|
earlier `--gpg-sign`.
|
||||||
|
|
||||||
|
--continue::
|
||||||
|
-r::
|
||||||
|
--resolved::
|
||||||
|
After a patch failure (e.g. attempting to apply
|
||||||
|
conflicting patch), the user has applied it by hand and
|
||||||
|
the index file stores the result of the application.
|
||||||
|
Make a commit using the authorship and commit log
|
||||||
|
extracted from the e-mail message and the current index
|
||||||
|
file, and continue.
|
||||||
|
|
||||||
|
--resolvemsg=<msg>::
|
||||||
|
When a patch failure occurs, <msg> will be printed
|
||||||
|
to the screen before exiting. This overrides the
|
||||||
|
standard message informing you to use `--continue`
|
||||||
|
or `--skip` to handle the failure. This is solely
|
||||||
|
for internal use between linkgit:git-rebase[1] and
|
||||||
|
linkgit:git-am[1].
|
||||||
|
|
||||||
|
--abort::
|
||||||
|
Restore the original branch and abort the patching operation.
|
||||||
|
Revert the contents of files involved in the am operation to their
|
||||||
|
pre-am state.
|
||||||
|
|
||||||
|
--quit::
|
||||||
|
Abort the patching operation but keep HEAD and the index
|
||||||
|
untouched.
|
||||||
|
|
||||||
|
--retry::
|
||||||
|
Try to apply the last conflicting patch again. This is generally
|
||||||
|
only useful for passing extra options to the retry attempt
|
||||||
|
(e.g., `--3way`), since otherwise you'll just see the same
|
||||||
|
failure again.
|
||||||
|
|
||||||
|
--show-current-patch[=(diff|raw)]::
|
||||||
|
Show the message at which linkgit:git-am[1] has stopped due to
|
||||||
|
conflicts. If `raw` is specified, show the raw contents of
|
||||||
|
the e-mail message; if `diff`, show the diff portion only.
|
||||||
|
Defaults to `raw`.
|
||||||
|
|
||||||
|
--allow-empty::
|
||||||
|
After a patch failure on an input e-mail message lacking a patch,
|
||||||
|
create an empty commit with the contents of the e-mail message
|
||||||
|
as its log message.
|
||||||
|
|
||||||
|
[[discussion]]
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
The commit author name is taken from the "From: " line of the
|
||||||
|
message, and commit author date is taken from the "Date: " line
|
||||||
|
of the message. The "Subject: " line is used as the title of
|
||||||
|
the commit, after stripping common prefix "[PATCH <anything>]".
|
||||||
|
The "Subject: " line is supposed to concisely describe what the
|
||||||
|
commit is about in one line of text.
|
||||||
|
|
||||||
|
"From: ", "Date: ", and "Subject: " lines starting the body override the
|
||||||
|
respective commit author name and title values taken from the headers.
|
||||||
|
|
||||||
|
The commit message is formed by the title taken from the
|
||||||
|
"Subject: ", a blank line and the body of the message up to
|
||||||
|
where the patch begins. Excess whitespace at the end of each
|
||||||
|
line is automatically stripped.
|
||||||
|
|
||||||
|
The patch is expected to be inline, directly following the
|
||||||
|
message.
|
||||||
|
include::format-patch-end-of-commit-message.adoc[]
|
||||||
|
|
||||||
|
This means that the contents of the commit message can inadvertently
|
||||||
|
interrupt the processing (see the <<caveats,CAVEATS>> section below).
|
||||||
|
|
||||||
|
When initially invoking linkgit:git-am[1], you give it the names of the mailboxes
|
||||||
|
to process. Upon seeing the first patch that does not apply, it
|
||||||
|
aborts in the middle. You can recover from this in one of two ways:
|
||||||
|
|
||||||
|
. skip the current patch by re-running the command with the `--skip`
|
||||||
|
option.
|
||||||
|
|
||||||
|
. hand resolve the conflict in the working directory, and update
|
||||||
|
the index file to bring it into a state that the patch should
|
||||||
|
have produced. Then run the command with the `--continue` option.
|
||||||
|
|
||||||
|
The command refuses to process new mailboxes until the current
|
||||||
|
operation is finished, so if you decide to start over from scratch,
|
||||||
|
run `git am --abort` before running the command with mailbox
|
||||||
|
names.
|
||||||
|
|
||||||
|
Before any patches are applied, ORIG_HEAD is set to the tip of the
|
||||||
|
current branch. This is useful if you have problems with multiple
|
||||||
|
commits, like running linkgit:git-am[1] on the wrong branch or an error
|
||||||
|
in the commits that is more easily fixed by changing the mailbox (e.g.
|
||||||
|
errors in the "From:" lines).
|
||||||
|
|
||||||
|
[[caveats]]
|
||||||
|
CAVEATS
|
||||||
|
-------
|
||||||
|
|
||||||
|
:git-am: 1
|
||||||
|
include::format-patch-caveats.adoc[]
|
||||||
|
|
||||||
|
HOOKS
|
||||||
|
-----
|
||||||
|
This command can run `applypatch-msg`, `pre-applypatch`,
|
||||||
|
and `post-applypatch` hooks. See linkgit:githooks[5] for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
See the `--verify`/`-n`/`--no-verify` options.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/am.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-apply[1],
|
||||||
|
linkgit:git-format-patch[1].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
33
app/src/main/assets/manpages/git-annotate.txt
Normal file
33
app/src/main/assets/manpages/git-annotate.txt
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
git-annotate(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-annotate - Annotate file lines with commit information
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git annotate' [<options>] [<rev-opts>] [<rev>] [--] <file>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Annotates each line in the given file with information from the commit
|
||||||
|
which introduced the line. Optionally annotates from a given revision.
|
||||||
|
|
||||||
|
The only difference between this command and linkgit:git-blame[1] is that
|
||||||
|
they use slightly different output formats, and this command exists only
|
||||||
|
for backward compatibility to support existing scripts, and provide a more
|
||||||
|
familiar command name for people coming from other SCM systems.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::blame-options.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-blame[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
299
app/src/main/assets/manpages/git-apply.txt
Normal file
299
app/src/main/assets/manpages/git-apply.txt
Normal file
@@ -0,0 +1,299 @@
|
|||||||
|
git-apply(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-apply - Apply a patch to files and/or to the index
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git apply' [--stat] [--numstat] [--summary] [--check]
|
||||||
|
[--index | --intent-to-add] [--3way] [--ours | --theirs | --union]
|
||||||
|
[--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
|
||||||
|
[--allow-binary-replacement | --binary] [--reject] [-z]
|
||||||
|
[-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
|
||||||
|
[--ignore-space-change | --ignore-whitespace]
|
||||||
|
[--whitespace=(nowarn|warn|fix|error|error-all)]
|
||||||
|
[--exclude=<path>] [--include=<path>] [--directory=<root>]
|
||||||
|
[--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Reads the supplied diff output (i.e. "a patch") and applies it to files.
|
||||||
|
When running from a subdirectory in a repository, patched paths
|
||||||
|
outside the directory are ignored.
|
||||||
|
With the `--index` option, the patch is also applied to the index, and
|
||||||
|
with the `--cached` option, the patch is only applied to the index.
|
||||||
|
Without these options, the command applies the patch only to files,
|
||||||
|
and does not require them to be in a Git repository.
|
||||||
|
|
||||||
|
This command applies the patch but does not create a commit. Use
|
||||||
|
linkgit:git-am[1] to create commits from patches generated by
|
||||||
|
linkgit:git-format-patch[1] and/or received by email.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<patch>...::
|
||||||
|
The files to read the patch from. '-' can be used to read
|
||||||
|
from the standard input.
|
||||||
|
|
||||||
|
--stat::
|
||||||
|
Instead of applying the patch, output diffstat for the
|
||||||
|
input. Turns off "apply".
|
||||||
|
|
||||||
|
--numstat::
|
||||||
|
Similar to `--stat`, but shows the number of added and
|
||||||
|
deleted lines in decimal notation and the pathname without
|
||||||
|
abbreviation, to make it more machine friendly. For
|
||||||
|
binary files, outputs two `-` instead of saying
|
||||||
|
`0 0`. Turns off "apply".
|
||||||
|
|
||||||
|
--summary::
|
||||||
|
Instead of applying the patch, output a condensed
|
||||||
|
summary of information obtained from git diff extended
|
||||||
|
headers, such as creations, renames, and mode changes.
|
||||||
|
Turns off "apply".
|
||||||
|
|
||||||
|
--check::
|
||||||
|
Instead of applying the patch, see if the patch is
|
||||||
|
applicable to the current working tree and/or the index
|
||||||
|
file and detects errors. Turns off "apply".
|
||||||
|
|
||||||
|
--index::
|
||||||
|
Apply the patch to both the index and the working tree (or
|
||||||
|
merely check that it would apply cleanly to both if `--check` is
|
||||||
|
in effect). Note that `--index` expects index entries and
|
||||||
|
working tree copies for relevant paths to be identical (their
|
||||||
|
contents and metadata such as file mode must match), and will
|
||||||
|
raise an error if they are not, even if the patch would apply
|
||||||
|
cleanly to both the index and the working tree in isolation.
|
||||||
|
|
||||||
|
--cached::
|
||||||
|
Apply the patch to just the index, without touching the working
|
||||||
|
tree. If `--check` is in effect, merely check that it would
|
||||||
|
apply cleanly to the index entry.
|
||||||
|
|
||||||
|
-N::
|
||||||
|
--intent-to-add::
|
||||||
|
When applying the patch only to the working tree, mark new
|
||||||
|
files to be added to the index later (see `--intent-to-add`
|
||||||
|
option in linkgit:git-add[1]). This option is ignored if
|
||||||
|
`--index` or `--cached` are used, and has no effect outside a Git
|
||||||
|
repository. Note that `--index` could be implied by other options
|
||||||
|
such as `--3way`.
|
||||||
|
|
||||||
|
-3::
|
||||||
|
--3way::
|
||||||
|
Attempt 3-way merge if the patch records the identity of blobs it is supposed
|
||||||
|
to apply to and we have those blobs available locally, possibly leaving the
|
||||||
|
conflict markers in the files in the working tree for the user to
|
||||||
|
resolve. This option implies the `--index` option unless the
|
||||||
|
`--cached` option is used, and is incompatible with the `--reject` option.
|
||||||
|
When used with the `--cached` option, any conflicts are left at higher stages
|
||||||
|
in the cache.
|
||||||
|
|
||||||
|
--ours::
|
||||||
|
--theirs::
|
||||||
|
--union::
|
||||||
|
Instead of leaving conflicts in the file, resolve conflicts favouring
|
||||||
|
our (or their or both) side of the lines. Requires --3way.
|
||||||
|
|
||||||
|
--build-fake-ancestor=<file>::
|
||||||
|
Newer 'git diff' output has embedded 'index information'
|
||||||
|
for each blob to help identify the original version that
|
||||||
|
the patch applies to. When this flag is given, and if
|
||||||
|
the original versions of the blobs are available locally,
|
||||||
|
builds a temporary index containing those blobs.
|
||||||
|
+
|
||||||
|
When a pure mode change is encountered (which has no index information),
|
||||||
|
the information is read from the current index instead.
|
||||||
|
|
||||||
|
-R::
|
||||||
|
--reverse::
|
||||||
|
Apply the patch in reverse.
|
||||||
|
|
||||||
|
--reject::
|
||||||
|
For atomicity, 'git apply' by default fails the whole patch and
|
||||||
|
does not touch the working tree when some of the hunks
|
||||||
|
do not apply. This option makes it apply
|
||||||
|
the parts of the patch that are applicable, and leave the
|
||||||
|
rejected hunks in corresponding *.rej files.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
When `--numstat` has been given, do not munge pathnames,
|
||||||
|
but use a NUL-terminated machine-readable format.
|
||||||
|
+
|
||||||
|
Without this option, pathnames with "unusual" characters are quoted as
|
||||||
|
explained for the configuration variable `core.quotePath` (see
|
||||||
|
linkgit:git-config[1]).
|
||||||
|
|
||||||
|
-p<n>::
|
||||||
|
Remove <n> leading path components (separated by slashes) from
|
||||||
|
traditional diff paths. E.g., with `-p2`, a patch against
|
||||||
|
`a/dir/file` will be applied directly to `file`. The default is
|
||||||
|
1.
|
||||||
|
|
||||||
|
-C<n>::
|
||||||
|
Ensure at least <n> lines of surrounding context match before
|
||||||
|
and after each change. When fewer lines of surrounding
|
||||||
|
context exist they all must match. By default no context is
|
||||||
|
ever ignored.
|
||||||
|
|
||||||
|
--unidiff-zero::
|
||||||
|
By default, 'git apply' expects that the patch being
|
||||||
|
applied is a unified diff with at least one line of context.
|
||||||
|
This provides good safety measures, but breaks down when
|
||||||
|
applying a diff generated with `--unified=0`. To bypass these
|
||||||
|
checks use `--unidiff-zero`.
|
||||||
|
+
|
||||||
|
Note, for the reasons stated above, the usage of context-free patches is
|
||||||
|
discouraged.
|
||||||
|
|
||||||
|
--apply::
|
||||||
|
If you use any of the options marked "Turns off
|
||||||
|
'apply'" above, 'git apply' reads and outputs the
|
||||||
|
requested information without actually applying the
|
||||||
|
patch. Give this flag after those flags to also apply
|
||||||
|
the patch.
|
||||||
|
|
||||||
|
--no-add::
|
||||||
|
When applying a patch, ignore additions made by the
|
||||||
|
patch. This can be used to extract the common part between
|
||||||
|
two files by first running 'diff' on them and applying
|
||||||
|
the result with this option, which would apply the
|
||||||
|
deletion part but not the addition part.
|
||||||
|
|
||||||
|
--allow-binary-replacement::
|
||||||
|
--binary::
|
||||||
|
Historically we did not allow binary patch application
|
||||||
|
without an explicit permission from the user, and this
|
||||||
|
flag was the way to do so. Currently, we always allow binary
|
||||||
|
patch application, so this is a no-op.
|
||||||
|
|
||||||
|
--exclude=<path-pattern>::
|
||||||
|
Don't apply changes to files matching the given path pattern. This can
|
||||||
|
be useful when importing patchsets, where you want to exclude certain
|
||||||
|
files or directories.
|
||||||
|
|
||||||
|
--include=<path-pattern>::
|
||||||
|
Apply changes to files matching the given path pattern. This can
|
||||||
|
be useful when importing patchsets, where you want to include certain
|
||||||
|
files or directories.
|
||||||
|
+
|
||||||
|
When `--exclude` and `--include` patterns are used, they are examined in the
|
||||||
|
order they appear on the command line, and the first match determines if a
|
||||||
|
patch to each path is used. A patch to a path that does not match any
|
||||||
|
include/exclude pattern is used by default if there is no include pattern
|
||||||
|
on the command line, and ignored if there is any include pattern.
|
||||||
|
|
||||||
|
--ignore-space-change::
|
||||||
|
--ignore-whitespace::
|
||||||
|
When applying a patch, ignore changes in whitespace in context
|
||||||
|
lines if necessary.
|
||||||
|
Context lines will preserve their whitespace, and they will not
|
||||||
|
undergo whitespace fixing regardless of the value of the
|
||||||
|
`--whitespace` option. New lines will still be fixed, though.
|
||||||
|
|
||||||
|
--whitespace=<action>::
|
||||||
|
When applying a patch, detect a new or modified line that has
|
||||||
|
whitespace errors. What are considered whitespace errors is
|
||||||
|
controlled by `core.whitespace` configuration. By default,
|
||||||
|
trailing whitespaces (including lines that solely consist of
|
||||||
|
whitespaces) and a space character that is immediately followed
|
||||||
|
by a tab character inside the initial indent of the line are
|
||||||
|
considered whitespace errors.
|
||||||
|
+
|
||||||
|
By default, the command outputs warning messages but applies the patch.
|
||||||
|
When `git-apply` is used for statistics and not applying a
|
||||||
|
patch, it defaults to `nowarn`.
|
||||||
|
+
|
||||||
|
You can use different `<action>` values to control this
|
||||||
|
behavior:
|
||||||
|
+
|
||||||
|
* `nowarn` turns off the trailing whitespace warning.
|
||||||
|
* `warn` outputs warnings for a few such errors, but applies the
|
||||||
|
patch as-is (default).
|
||||||
|
* `fix` outputs warnings for a few such errors, and applies the
|
||||||
|
patch after fixing them (`strip` is a synonym -- the tool
|
||||||
|
used to consider only trailing whitespace characters as errors, and the
|
||||||
|
fix involved 'stripping' them, but modern Gits do more).
|
||||||
|
* `error` outputs warnings for a few such errors, and refuses
|
||||||
|
to apply the patch.
|
||||||
|
* `error-all` is similar to `error` but shows all errors.
|
||||||
|
|
||||||
|
--inaccurate-eof::
|
||||||
|
Under certain circumstances, some versions of 'diff' do not correctly
|
||||||
|
detect a missing new-line at the end of the file. As a result, patches
|
||||||
|
created by such 'diff' programs do not record incomplete lines
|
||||||
|
correctly. This option adds support for applying such patches by
|
||||||
|
working around this bug.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
--verbose::
|
||||||
|
Report progress to stderr. By default, only a message about the
|
||||||
|
current patch being applied will be printed. This option will cause
|
||||||
|
additional information to be reported.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Suppress stderr output. Messages about patch status and progress
|
||||||
|
will not be printed.
|
||||||
|
|
||||||
|
--recount::
|
||||||
|
Do not trust the line counts in the hunk headers, but infer them
|
||||||
|
by inspecting the patch (e.g. after editing the patch without
|
||||||
|
adjusting the hunk headers appropriately).
|
||||||
|
|
||||||
|
--directory=<root>::
|
||||||
|
Prepend <root> to all filenames. If a "-p" argument was also passed,
|
||||||
|
it is applied before prepending the new root.
|
||||||
|
+
|
||||||
|
For example, a patch that talks about updating `a/git-gui.sh` to `b/git-gui.sh`
|
||||||
|
can be applied to the file in the working tree `modules/git-gui/git-gui.sh` by
|
||||||
|
running `git apply --directory=modules/git-gui`.
|
||||||
|
|
||||||
|
--unsafe-paths::
|
||||||
|
By default, a patch that affects outside the working area
|
||||||
|
(either a Git controlled working tree, or the current working
|
||||||
|
directory when "git apply" is used as a replacement of GNU
|
||||||
|
patch) is rejected as a mistake (or a mischief).
|
||||||
|
+
|
||||||
|
When `git apply` is used as a "better GNU patch", the user can pass
|
||||||
|
the `--unsafe-paths` option to override this safety check. This option
|
||||||
|
has no effect when `--index` or `--cached` is in use.
|
||||||
|
|
||||||
|
--allow-empty::
|
||||||
|
Don't return an error for patches containing no diff. This includes
|
||||||
|
empty patches and patches with commit text only.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/apply.adoc[]
|
||||||
|
|
||||||
|
SUBMODULES
|
||||||
|
----------
|
||||||
|
If the patch contains any changes to submodules then 'git apply'
|
||||||
|
treats these changes as follows.
|
||||||
|
|
||||||
|
If `--index` is specified (explicitly or implicitly), then the submodule
|
||||||
|
commits must match the index exactly for the patch to apply. If any
|
||||||
|
of the submodules are checked-out, then these check-outs are completely
|
||||||
|
ignored, i.e., they are not required to be up to date or clean and they
|
||||||
|
are not updated.
|
||||||
|
|
||||||
|
If `--index` is not specified, then the submodule commits in the patch
|
||||||
|
are ignored and only the absence or presence of the corresponding
|
||||||
|
subdirectory is checked and (if possible) updated.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-am[1].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
113
app/src/main/assets/manpages/git-archimport.txt
Normal file
113
app/src/main/assets/manpages/git-archimport.txt
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
git-archimport(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-archimport - Import a GNU Arch repository into Git
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git archimport' [-h] [-v] [-o] [-a] [-f] [-T] [-D <depth>] [-t <tempdir>]
|
||||||
|
<archive>/<branch>[:<git-branch>]...
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Imports a project from one or more GNU Arch repositories.
|
||||||
|
It will follow branches
|
||||||
|
and repositories within the namespaces defined by the <archive>/<branch>
|
||||||
|
parameters supplied. If it cannot find the remote branch a merge comes from
|
||||||
|
it will just import it as a regular commit. If it can find it, it will mark it
|
||||||
|
as a merge whenever possible (see discussion below).
|
||||||
|
|
||||||
|
The script expects you to provide the key roots where it can start the import
|
||||||
|
from an 'initial import' or 'tag' type of Arch commit. It will follow and
|
||||||
|
import new branches within the provided roots.
|
||||||
|
|
||||||
|
It expects to be dealing with one project only. If it sees
|
||||||
|
branches that have different roots, it will refuse to run. In that case,
|
||||||
|
edit your <archive>/<branch> parameters to define clearly the scope of the
|
||||||
|
import.
|
||||||
|
|
||||||
|
'git archimport' uses `tla` extensively in the background to access the
|
||||||
|
Arch repository.
|
||||||
|
Make sure you have a recent version of `tla` available in the path. `tla` must
|
||||||
|
know about the repositories you pass to 'git archimport'.
|
||||||
|
|
||||||
|
For the initial import, 'git archimport' expects to find itself in an empty
|
||||||
|
directory. To follow the development of a project that uses Arch, rerun
|
||||||
|
'git archimport' with the same parameters as the initial import to perform
|
||||||
|
incremental imports.
|
||||||
|
|
||||||
|
While 'git archimport' will try to create sensible branch names for the
|
||||||
|
archives that it imports, it is also possible to specify Git branch names
|
||||||
|
manually. To do so, write a Git branch name after each <archive>/<branch>
|
||||||
|
parameter, separated by a colon. This way, you can shorten the Arch
|
||||||
|
branch names and convert Arch jargon to Git jargon, for example mapping a
|
||||||
|
"PROJECT{litdd}devo{litdd}VERSION" branch to "master".
|
||||||
|
|
||||||
|
Associating multiple Arch branches to one Git branch is possible; the
|
||||||
|
result will make the most sense only if no commits are made to the first
|
||||||
|
branch, after the second branch is created. Still, this is useful to
|
||||||
|
convert Arch repositories that had been rotated periodically.
|
||||||
|
|
||||||
|
|
||||||
|
MERGES
|
||||||
|
------
|
||||||
|
Patch merge data from Arch is used to mark merges in Git as well. Git
|
||||||
|
does not care much about tracking patches, and only considers a merge when a
|
||||||
|
branch incorporates all the commits since the point they forked. The end result
|
||||||
|
is that Git will have a good idea of how far branches have diverged. So the
|
||||||
|
import process does lose some patch-trading metadata.
|
||||||
|
|
||||||
|
Fortunately, when you try and merge branches imported from Arch,
|
||||||
|
Git will find a good merge base, and it has a good chance of identifying
|
||||||
|
patches that have been traded out-of-sequence between the branches.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
-h::
|
||||||
|
Display usage.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
Verbose output.
|
||||||
|
|
||||||
|
-T::
|
||||||
|
Many tags. Will create a tag for every commit, reflecting the commit
|
||||||
|
name in the Arch repository.
|
||||||
|
|
||||||
|
-f::
|
||||||
|
Use the fast patchset import strategy. This can be significantly
|
||||||
|
faster for large trees, but cannot handle directory renames or
|
||||||
|
permissions changes. The default strategy is slow and safe.
|
||||||
|
|
||||||
|
-o::
|
||||||
|
Use this for compatibility with old-style branch names used by
|
||||||
|
earlier versions of 'git archimport'. Old-style branch names
|
||||||
|
were category{litdd}branch, whereas new-style branch names are
|
||||||
|
archive,category{litdd}branch{litdd}version. In both cases, names given
|
||||||
|
on the command-line will override the automatically-generated
|
||||||
|
ones.
|
||||||
|
|
||||||
|
-D <depth>::
|
||||||
|
Follow merge ancestry and attempt to import trees that have been
|
||||||
|
merged from. Specify a depth greater than 1 if patch logs have been
|
||||||
|
pruned.
|
||||||
|
|
||||||
|
-a::
|
||||||
|
Attempt to auto-register archives at `http://mirrors.sourcecontrol.net`
|
||||||
|
This is particularly useful with the -D option.
|
||||||
|
|
||||||
|
-t <tmpdir>::
|
||||||
|
Override the default tempdir.
|
||||||
|
|
||||||
|
|
||||||
|
<archive>/<branch>::
|
||||||
|
<archive>/<branch> identifier in a format that `tla log` understands.
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
248
app/src/main/assets/manpages/git-archive.txt
Normal file
248
app/src/main/assets/manpages/git-archive.txt
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
git-archive(1)
|
||||||
|
==============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-archive - Create an archive of files from a named tree
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git archive' [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
|
||||||
|
[-o <file> | --output=<file>] [--worktree-attributes]
|
||||||
|
[--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
|
||||||
|
[<path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Creates an archive of the specified format containing the tree
|
||||||
|
structure for the named tree, and writes it out to the standard
|
||||||
|
output. If <prefix> is specified it is
|
||||||
|
prepended to the filenames in the archive.
|
||||||
|
|
||||||
|
'git archive' behaves differently when given a tree ID as opposed to a
|
||||||
|
commit ID or tag ID. When a tree ID is provided, the current time is
|
||||||
|
used as the modification time of each file in the archive. On the
|
||||||
|
other hand, when a commit ID or tag ID is provided, the commit time as
|
||||||
|
recorded in the referenced commit object is used instead.
|
||||||
|
Additionally the commit ID is stored in a global extended pax header
|
||||||
|
if the tar format is used; it can be extracted using 'git
|
||||||
|
get-tar-commit-id'. In ZIP files it is stored as a file comment.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--format=<fmt>::
|
||||||
|
Format of the resulting archive. Possible values are `tar`,
|
||||||
|
`zip`, `tar.gz`, `tgz`, and any format defined using the
|
||||||
|
configuration option `tar.<format>.command`. If `--format`
|
||||||
|
is not given, and the output file is specified, the format is
|
||||||
|
inferred from the filename if possible (e.g. writing to `foo.zip`
|
||||||
|
makes the output to be in the `zip` format). Otherwise the output
|
||||||
|
format is `tar`.
|
||||||
|
|
||||||
|
-l::
|
||||||
|
--list::
|
||||||
|
Show all available formats.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
--verbose::
|
||||||
|
Report progress to stderr.
|
||||||
|
|
||||||
|
--prefix=<prefix>/::
|
||||||
|
Prepend <prefix>/ to paths in the archive. Can be repeated; its
|
||||||
|
rightmost value is used for all tracked files. See below which
|
||||||
|
value gets used by `--add-file`.
|
||||||
|
+
|
||||||
|
The <prefix> is used as given and is not normalized. It may
|
||||||
|
include leading slashes or parent directory components (e.g.,
|
||||||
|
`../`). Some archive consumers may treat such paths as
|
||||||
|
potentially unsafe and adjust or warn during extraction.
|
||||||
|
|
||||||
|
-o <file>::
|
||||||
|
--output=<file>::
|
||||||
|
Write the archive to <file> instead of stdout.
|
||||||
|
|
||||||
|
--add-file=<file>::
|
||||||
|
Add a non-tracked file to the archive. Can be repeated to add
|
||||||
|
multiple files. The path of the file in the archive is built by
|
||||||
|
concatenating the value of the last `--prefix` option (if any)
|
||||||
|
before this `--add-file` and the basename of <file>.
|
||||||
|
|
||||||
|
--add-virtual-file=<path>:<content>::
|
||||||
|
Add the specified contents to the archive. Can be repeated to add
|
||||||
|
multiple files.
|
||||||
|
+
|
||||||
|
The `<path>` argument can start and end with a literal double-quote
|
||||||
|
character; the contained file name is interpreted as a C-style string,
|
||||||
|
i.e. the backslash is interpreted as escape character. The path must
|
||||||
|
be quoted if it contains a colon, to avoid the colon from being
|
||||||
|
misinterpreted as the separator between the path and the contents, or
|
||||||
|
if the path begins or ends with a double-quote character.
|
||||||
|
+
|
||||||
|
The file mode is limited to a regular file, and the option may be
|
||||||
|
subject to platform-dependent command-line limits. For non-trivial
|
||||||
|
cases, write an untracked file and use `--add-file` instead.
|
||||||
|
+
|
||||||
|
Note that unlike `--add-file` the path created in the archive is not
|
||||||
|
affected by the `--prefix` option, as a full `<path>` can be given as
|
||||||
|
the value of the option.
|
||||||
|
|
||||||
|
--worktree-attributes::
|
||||||
|
Look for attributes in .gitattributes files in the working tree
|
||||||
|
as well (see <<ATTRIBUTES>>).
|
||||||
|
|
||||||
|
--mtime=<time>::
|
||||||
|
Set modification time of archive entries. Without this option
|
||||||
|
the committer time is used if `<tree-ish>` is a commit or tag,
|
||||||
|
and the current time if it is a tree.
|
||||||
|
|
||||||
|
<extra>::
|
||||||
|
This can be any options that the archiver backend understands.
|
||||||
|
See next section.
|
||||||
|
|
||||||
|
--remote=<repo>::
|
||||||
|
Instead of making a tar archive from the local repository,
|
||||||
|
retrieve a tar archive from a remote repository. Note that the
|
||||||
|
remote repository may place restrictions on which sha1
|
||||||
|
expressions may be allowed in `<tree-ish>`. See
|
||||||
|
linkgit:git-upload-archive[1] for details.
|
||||||
|
|
||||||
|
--exec=<git-upload-archive>::
|
||||||
|
Used with --remote to specify the path to the
|
||||||
|
'git-upload-archive' on the remote side.
|
||||||
|
|
||||||
|
<tree-ish>::
|
||||||
|
The tree or commit to produce an archive for.
|
||||||
|
|
||||||
|
<path>::
|
||||||
|
Without an optional path parameter, all files and subdirectories
|
||||||
|
of the current working directory are included in the archive.
|
||||||
|
If one or more paths are specified, only these are included.
|
||||||
|
|
||||||
|
BACKEND EXTRA OPTIONS
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
zip
|
||||||
|
~~~
|
||||||
|
-<digit>::
|
||||||
|
Specify compression level. Larger values allow the command
|
||||||
|
to spend more time to compress to smaller size. Supported
|
||||||
|
values are from `-0` (store-only) to `-9` (best ratio).
|
||||||
|
Default is `-6` if not given.
|
||||||
|
|
||||||
|
tar
|
||||||
|
~~~
|
||||||
|
-<number>::
|
||||||
|
Specify compression level. The value will be passed to the
|
||||||
|
compression command configured in `tar.<format>.command`. See
|
||||||
|
manual page of the configured command for the list of supported
|
||||||
|
levels and the default level if this option isn't specified.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
tar.umask::
|
||||||
|
This variable can be used to restrict the permission bits of
|
||||||
|
tar archive entries. The default is 0002, which turns off the
|
||||||
|
world write bit. The special value "user" indicates that the
|
||||||
|
archiving user's umask will be used instead. See umask(2) for
|
||||||
|
details. If `--remote` is used then only the configuration of
|
||||||
|
the remote repository takes effect.
|
||||||
|
|
||||||
|
tar.<format>.command::
|
||||||
|
This variable specifies a shell command through which the tar
|
||||||
|
output generated by `git archive` should be piped. The command
|
||||||
|
is executed using the shell with the generated tar file on its
|
||||||
|
standard input, and should produce the final output on its
|
||||||
|
standard output. Any compression-level options will be passed
|
||||||
|
to the command (e.g., `-9`).
|
||||||
|
+
|
||||||
|
The `tar.gz` and `tgz` formats are defined automatically and use the
|
||||||
|
magic command `git archive gzip` by default, which invokes an internal
|
||||||
|
implementation of gzip.
|
||||||
|
|
||||||
|
tar.<format>.remote::
|
||||||
|
If true, enable the format for use by remote clients via
|
||||||
|
linkgit:git-upload-archive[1]. Defaults to false for
|
||||||
|
user-defined formats, but true for the `tar.gz` and `tgz`
|
||||||
|
formats.
|
||||||
|
|
||||||
|
[[ATTRIBUTES]]
|
||||||
|
ATTRIBUTES
|
||||||
|
----------
|
||||||
|
|
||||||
|
export-ignore::
|
||||||
|
Files and directories with the attribute export-ignore won't be
|
||||||
|
added to archive files. See linkgit:gitattributes[5] for details.
|
||||||
|
|
||||||
|
export-subst::
|
||||||
|
If the attribute export-subst is set for a file then Git will
|
||||||
|
expand several placeholders when adding this file to an archive.
|
||||||
|
See linkgit:gitattributes[5] for details.
|
||||||
|
|
||||||
|
Note that attributes are by default taken from the `.gitattributes` files
|
||||||
|
in the tree that is being archived. If you want to tweak the way the
|
||||||
|
output is generated after the fact (e.g. you committed without adding an
|
||||||
|
appropriate export-ignore in its `.gitattributes`), adjust the checked out
|
||||||
|
`.gitattributes` file as necessary and use `--worktree-attributes`
|
||||||
|
option. Alternatively you can keep necessary attributes that should apply
|
||||||
|
while archiving any tree in your `$GIT_DIR/info/attributes` file.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
`git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)`::
|
||||||
|
|
||||||
|
Create a tar archive that contains the contents of the
|
||||||
|
latest commit on the current branch, and extract it in the
|
||||||
|
`/var/tmp/junk` directory.
|
||||||
|
|
||||||
|
`git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz`::
|
||||||
|
|
||||||
|
Create a compressed tarball for v1.4.0 release.
|
||||||
|
|
||||||
|
`git archive --format=tar.gz --prefix=git-1.4.0/ v1.4.0 >git-1.4.0.tar.gz`::
|
||||||
|
|
||||||
|
Same as above, but using the builtin tar.gz handling.
|
||||||
|
|
||||||
|
`git archive --prefix=git-1.4.0/ -o git-1.4.0.tar.gz v1.4.0`::
|
||||||
|
|
||||||
|
Same as above, but the format is inferred from the output file.
|
||||||
|
|
||||||
|
`git archive --format=tar --prefix=git-1.4.0/ v1.4.0^{tree} | gzip >git-1.4.0.tar.gz`::
|
||||||
|
|
||||||
|
Create a compressed tarball for v1.4.0 release, but without a
|
||||||
|
global extended pax header.
|
||||||
|
|
||||||
|
`git archive --format=zip --prefix=git-docs/ HEAD:Documentation/ > git-1.4.0-docs.zip`::
|
||||||
|
|
||||||
|
Put everything in the current head's Documentation/ directory
|
||||||
|
into 'git-1.4.0-docs.zip', with the prefix 'git-docs/'.
|
||||||
|
|
||||||
|
`git archive -o latest.zip HEAD`::
|
||||||
|
|
||||||
|
Create a Zip archive that contains the contents of the latest
|
||||||
|
commit on the current branch. Note that the output format is
|
||||||
|
inferred by the extension of the output file.
|
||||||
|
|
||||||
|
`git archive -o latest.tar --prefix=build/ --add-file=configure --prefix= HEAD`::
|
||||||
|
|
||||||
|
Creates a tar archive that contains the contents of the latest
|
||||||
|
commit on the current branch with no prefix and the untracked
|
||||||
|
file 'configure' with the prefix 'build/'.
|
||||||
|
|
||||||
|
`git config tar.tar.xz.command "xz -c"`::
|
||||||
|
|
||||||
|
Configure a "tar.xz" format for making LZMA-compressed tarfiles.
|
||||||
|
You can use it specifying `--format=tar.xz`, or by creating an
|
||||||
|
output file like `-o foo.tar.xz`.
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:gitattributes[5]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
75
app/src/main/assets/manpages/git-backfill.txt
Normal file
75
app/src/main/assets/manpages/git-backfill.txt
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
git-backfill(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-backfill - Download missing objects in a partial clone
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git backfill [--min-batch-size=<n>] [--[no-]sparse]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Blobless partial clones are created using `git clone --filter=blob:none`
|
||||||
|
and then configure the local repository such that the Git client avoids
|
||||||
|
downloading blob objects unless they are required for a local operation.
|
||||||
|
This initially means that the clone and later fetches download reachable
|
||||||
|
commits and trees but no blobs. Later operations that change the `HEAD`
|
||||||
|
pointer, such as `git checkout` or `git merge`, may need to download
|
||||||
|
missing blobs in order to complete their operation.
|
||||||
|
|
||||||
|
In the worst cases, commands that compute blob diffs, such as `git blame`,
|
||||||
|
become very slow as they download the missing blobs in single-blob
|
||||||
|
requests to satisfy the missing object as the Git command needs it. This
|
||||||
|
leads to multiple download requests and no ability for the Git server to
|
||||||
|
provide delta compression across those objects.
|
||||||
|
|
||||||
|
The `git backfill` command provides a way for the user to request that
|
||||||
|
Git downloads the missing blobs (with optional filters) such that the
|
||||||
|
missing blobs representing historical versions of files can be downloaded
|
||||||
|
in batches. The `backfill` command attempts to optimize the request by
|
||||||
|
grouping blobs that appear at the same path, hopefully leading to good
|
||||||
|
delta compression in the packfile sent by the server.
|
||||||
|
|
||||||
|
In this way, `git backfill` provides a mechanism to break a large clone
|
||||||
|
into smaller chunks. Starting with a blobless partial clone with `git
|
||||||
|
clone --filter=blob:none` and then running `git backfill` in the local
|
||||||
|
repository provides a way to download all reachable objects in several
|
||||||
|
smaller network calls than downloading the entire repository at clone
|
||||||
|
time.
|
||||||
|
|
||||||
|
By default, `git backfill` downloads all blobs reachable from the `HEAD`
|
||||||
|
commit. This set can be restricted or expanded using various options.
|
||||||
|
|
||||||
|
THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR MAY CHANGE IN THE FUTURE.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
`--min-batch-size=<n>`::
|
||||||
|
Specify a minimum size for a batch of missing objects to request
|
||||||
|
from the server. This size may be exceeded by the last set of
|
||||||
|
blobs seen at a given path. The default minimum batch size is
|
||||||
|
50,000.
|
||||||
|
|
||||||
|
`--sparse`::
|
||||||
|
`--no-sparse`::
|
||||||
|
Only download objects if they appear at a path that matches the
|
||||||
|
current sparse-checkout. If the sparse-checkout feature is enabled,
|
||||||
|
then `--sparse` is assumed and can be disabled with `--no-sparse`.
|
||||||
|
|
||||||
|
You may also specify the commit limiting options from linkgit:git-rev-list[1].
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-clone[1],
|
||||||
|
linkgit:git-rev-list[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
1358
app/src/main/assets/manpages/git-bisect-lk2009.txt
Normal file
1358
app/src/main/assets/manpages/git-bisect-lk2009.txt
Normal file
File diff suppressed because it is too large
Load Diff
527
app/src/main/assets/manpages/git-bisect.txt
Normal file
527
app/src/main/assets/manpages/git-bisect.txt
Normal file
@@ -0,0 +1,527 @@
|
|||||||
|
git-bisect(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-bisect - Use binary search to find the commit that introduced a bug
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git bisect' start [--term-(bad|new)=<term-new> --term-(good|old)=<term-old>]
|
||||||
|
[--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]
|
||||||
|
'git bisect' (bad|new|<term-new>) [<rev>]
|
||||||
|
'git bisect' (good|old|<term-old>) [<rev>...]
|
||||||
|
'git bisect' terms [--term-(good|old) | --term-(bad|new)]
|
||||||
|
'git bisect' skip [(<rev>|<range>)...]
|
||||||
|
'git bisect' next
|
||||||
|
'git bisect' reset [<commit>]
|
||||||
|
'git bisect' (visualize|view)
|
||||||
|
'git bisect' replay <logfile>
|
||||||
|
'git bisect' log
|
||||||
|
'git bisect' run <cmd> [<arg>...]
|
||||||
|
'git bisect' help
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This command uses a binary search algorithm to find which commit in
|
||||||
|
your project's history introduced a bug. You use it by first telling
|
||||||
|
it a "bad" commit that is known to contain the bug, and a "good"
|
||||||
|
commit that is known to be before the bug was introduced. Then `git
|
||||||
|
bisect` picks a commit between those two endpoints and asks you
|
||||||
|
whether the selected commit is "good" or "bad". It continues narrowing
|
||||||
|
down the range until it finds the exact commit that introduced the
|
||||||
|
change.
|
||||||
|
|
||||||
|
In fact, `git bisect` can be used to find the commit that changed
|
||||||
|
*any* property of your project; e.g., the commit that fixed a bug, or
|
||||||
|
the commit that caused a benchmark's performance to improve. To
|
||||||
|
support this more general usage, the terms "old" and "new" can be used
|
||||||
|
in place of "good" and "bad", or you can choose your own terms. See
|
||||||
|
section "Alternate terms" below for more information.
|
||||||
|
|
||||||
|
Basic bisect commands: start, bad, good
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
As an example, suppose you are trying to find the commit that broke a
|
||||||
|
feature that was known to work in version `v2.6.13-rc2` of your
|
||||||
|
project. You start a bisect session as follows:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git bisect start
|
||||||
|
$ git bisect bad # Current version is bad
|
||||||
|
$ git bisect good v2.6.13-rc2 # v2.6.13-rc2 is known to be good
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Once you have specified at least one bad and one good commit, `git
|
||||||
|
bisect` selects a commit in the middle of that range of history,
|
||||||
|
checks it out, and outputs something similar to the following:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
Bisecting: 675 revisions left to test after this (roughly 10 steps)
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
You should now compile the checked-out version and test it. If that
|
||||||
|
version works correctly, type
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git bisect good
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
If that version is broken, type
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git bisect bad
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Then `git bisect` will respond with something like
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
Bisecting: 337 revisions left to test after this (roughly 9 steps)
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Keep repeating the process: compile the tree, test it, and depending
|
||||||
|
on whether it is good or bad run `git bisect good` or `git bisect bad`
|
||||||
|
to ask for the next commit that needs testing.
|
||||||
|
|
||||||
|
Eventually there will be no more revisions left to inspect, and the
|
||||||
|
command will print out a description of the first bad commit. The
|
||||||
|
reference `refs/bisect/bad` will be left pointing at that commit.
|
||||||
|
|
||||||
|
|
||||||
|
Bisect reset
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
After a bisect session, to clean up the bisection state and return to
|
||||||
|
the original HEAD, issue the following command:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git bisect reset
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
By default, this will return your tree to the commit that was checked
|
||||||
|
out before `git bisect start`. (A new `git bisect start` will also do
|
||||||
|
that, as it cleans up the old bisection state.)
|
||||||
|
|
||||||
|
With an optional argument, you can return to a different commit
|
||||||
|
instead:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git bisect reset <commit>
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
For example, `git bisect reset bisect/bad` will check out the first
|
||||||
|
bad revision, while `git bisect reset HEAD` will leave you on the
|
||||||
|
current bisection commit and avoid switching commits at all.
|
||||||
|
|
||||||
|
|
||||||
|
Alternate terms
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Sometimes you are not looking for the commit that introduced a
|
||||||
|
breakage, but rather for a commit that caused a change between some
|
||||||
|
other "old" state and "new" state. For example, you might be looking
|
||||||
|
for the commit that introduced a particular fix. Or you might be
|
||||||
|
looking for the first commit in which the source-code filenames were
|
||||||
|
finally all converted to your company's naming standard. Or whatever.
|
||||||
|
|
||||||
|
In such cases it can be very confusing to use the terms "good" and
|
||||||
|
"bad" to refer to "the state before the change" and "the state after
|
||||||
|
the change". So instead, you can use the terms "old" and "new",
|
||||||
|
respectively, in place of "good" and "bad". (But note that you cannot
|
||||||
|
mix "good" and "bad" with "old" and "new" in a single session.)
|
||||||
|
|
||||||
|
In this more general usage, you provide `git bisect` with a "new"
|
||||||
|
commit that has some property and an "old" commit that doesn't have that
|
||||||
|
property. Each time `git bisect` checks out a commit, you test if that
|
||||||
|
commit has the property. If it does, mark the commit as "new";
|
||||||
|
otherwise, mark it as "old". When the bisection is done, `git bisect`
|
||||||
|
will report which commit introduced the property.
|
||||||
|
|
||||||
|
To use "old" and "new" instead of "good" and bad, you must run `git
|
||||||
|
bisect start` without commits as argument and then run the following
|
||||||
|
commands to add the commits:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
git bisect old [<rev>]
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
to indicate that a commit was before the sought change, or
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
git bisect new [<rev>...]
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
to indicate that it was after.
|
||||||
|
|
||||||
|
To get a reminder of the currently used terms, use
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
git bisect terms
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
You can get just the old term with `git bisect terms --term-old`
|
||||||
|
or `git bisect terms --term-good`; `git bisect terms --term-new`
|
||||||
|
and `git bisect terms --term-bad` can be used to learn how to call
|
||||||
|
the commits more recent than the sought change.
|
||||||
|
|
||||||
|
If you would like to use your own terms instead of "bad"/"good" or
|
||||||
|
"new"/"old", you can choose any names you like (except existing bisect
|
||||||
|
subcommands like `reset`, `start`, ...) by starting the
|
||||||
|
bisection using
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
git bisect start --term-old <term-old> --term-new <term-new>
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
For example, if you are looking for a commit that introduced a
|
||||||
|
performance regression, you might use
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
git bisect start --term-old fast --term-new slow
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Or if you are looking for the commit that fixed a bug, you might use
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
git bisect start --term-new fixed --term-old broken
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Then, use `git bisect <term-old>` and `git bisect <term-new>` instead
|
||||||
|
of `git bisect good` and `git bisect bad` to mark commits.
|
||||||
|
|
||||||
|
Bisect visualize/view
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To see the currently remaining suspects in 'gitk', issue the following
|
||||||
|
command during the bisection process (the subcommand `view` can be used
|
||||||
|
as an alternative to `visualize`):
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect visualize
|
||||||
|
------------
|
||||||
|
|
||||||
|
Git detects a graphical environment through various environment variables:
|
||||||
|
`DISPLAY`, which is set in X Window System environments on Unix systems.
|
||||||
|
`SESSIONNAME`, which is set under Cygwin in interactive desktop sessions.
|
||||||
|
`MSYSTEM`, which is set under Msys2 and Git for Windows.
|
||||||
|
`SECURITYSESSIONID`, which may be set on macOS in interactive desktop sessions.
|
||||||
|
|
||||||
|
If none of these environment variables is set, 'git log' is used instead.
|
||||||
|
You can also give command-line options such as `-p` and `--stat`.
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect visualize --stat
|
||||||
|
------------
|
||||||
|
|
||||||
|
Bisect log and bisect replay
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
After having marked revisions as good or bad, issue the following
|
||||||
|
command to show what has been done so far:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect log
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you discover that you made a mistake in specifying the status of a
|
||||||
|
revision, you can save the output of this command to a file, edit it to
|
||||||
|
remove the incorrect entries, and then issue the following commands to
|
||||||
|
return to a corrected state:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect reset
|
||||||
|
$ git bisect replay that-file
|
||||||
|
------------
|
||||||
|
|
||||||
|
Avoiding testing a commit
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If, in the middle of a bisect session, you know that the suggested
|
||||||
|
revision is not a good one to test (e.g. it fails to build and you
|
||||||
|
know that the failure does not have anything to do with the bug you
|
||||||
|
are chasing), you can manually select a nearby commit and test that
|
||||||
|
one instead.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect good/bad # previous round was good or bad.
|
||||||
|
Bisecting: 337 revisions left to test after this (roughly 9 steps)
|
||||||
|
$ git bisect visualize # oops, that is uninteresting.
|
||||||
|
$ git reset --hard HEAD~3 # try 3 revisions before what
|
||||||
|
# was suggested
|
||||||
|
------------
|
||||||
|
|
||||||
|
Then compile and test the chosen revision, and afterwards mark
|
||||||
|
the revision as good or bad in the usual manner.
|
||||||
|
|
||||||
|
Bisect skip
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
Instead of choosing a nearby commit by yourself, you can ask Git to do
|
||||||
|
it for you by issuing the command:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect skip # Current version cannot be tested
|
||||||
|
------------
|
||||||
|
|
||||||
|
However, if you skip a commit adjacent to the one you are looking for,
|
||||||
|
Git will be unable to tell exactly which of those commits was the
|
||||||
|
first bad one.
|
||||||
|
|
||||||
|
You can also skip a range of commits, instead of just one commit,
|
||||||
|
using range notation. For example:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect skip v2.5..v2.6
|
||||||
|
------------
|
||||||
|
|
||||||
|
This tells the bisect process that no commit after `v2.5`, up to and
|
||||||
|
including `v2.6`, should be tested.
|
||||||
|
|
||||||
|
Note that if you also want to skip the first commit of the range you
|
||||||
|
would issue the command:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect skip v2.5 v2.5..v2.6
|
||||||
|
------------
|
||||||
|
|
||||||
|
This tells the bisect process that the commits between `v2.5` and
|
||||||
|
`v2.6` (inclusive) should be skipped.
|
||||||
|
|
||||||
|
Bisect next
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
Normally, after marking a revision as good or bad, Git automatically
|
||||||
|
computes and checks out the next revision to test. However, if you need to
|
||||||
|
explicitly request the next bisection step, you can use:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect next
|
||||||
|
------------
|
||||||
|
|
||||||
|
You might use this to resume the bisection process after interrupting it
|
||||||
|
by checking out a different revision.
|
||||||
|
|
||||||
|
Cutting down bisection by giving more parameters to bisect start
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
You can further cut down the number of trials, if you know what part of
|
||||||
|
the tree is involved in the problem you are tracking down, by specifying
|
||||||
|
pathspec parameters when issuing the `bisect start` command:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect start -- arch/i386 include/asm-i386
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you know beforehand more than one good commit, you can narrow the
|
||||||
|
bisect space down by specifying all of the good commits immediately after
|
||||||
|
the bad commit when issuing the `bisect start` command:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect start v2.6.20-rc6 v2.6.20-rc4 v2.6.20-rc1 --
|
||||||
|
# v2.6.20-rc6 is bad
|
||||||
|
# v2.6.20-rc4 and v2.6.20-rc1 are good
|
||||||
|
------------
|
||||||
|
|
||||||
|
Bisect run
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
If you have a script that can tell if the current source code is good
|
||||||
|
or bad, you can bisect by issuing the command:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git bisect run my_script arguments
|
||||||
|
------------
|
||||||
|
|
||||||
|
Note that the script (`my_script` in the above example) should exit
|
||||||
|
with code 0 if the current source code is good/old, and exit with a
|
||||||
|
code between 1 and 127 (inclusive), except 125, if the current source
|
||||||
|
code is bad/new.
|
||||||
|
|
||||||
|
Any other exit code will abort the bisect process. It should be noted
|
||||||
|
that a program that terminates via `exit(-1)` leaves $? = 255, (see the
|
||||||
|
exit(3) manual page), as the value is chopped with `& 0377`.
|
||||||
|
|
||||||
|
The special exit code 125 should be used when the current source code
|
||||||
|
cannot be tested. If the script exits with this code, the current
|
||||||
|
revision will be skipped (see `git bisect skip` above). 125 was chosen
|
||||||
|
as the highest sensible value to use for this purpose, because 126 and 127
|
||||||
|
are used by POSIX shells to signal specific error status (127 is for
|
||||||
|
command not found, 126 is for command found but not executable--these
|
||||||
|
details do not matter, as they are normal errors in the script, as far as
|
||||||
|
`bisect run` is concerned).
|
||||||
|
|
||||||
|
You may often find that during a bisect session you want to have
|
||||||
|
temporary modifications (e.g. s/#define DEBUG 0/#define DEBUG 1/ in a
|
||||||
|
header file, or "revision that does not have this commit needs this
|
||||||
|
patch applied to work around another problem this bisection is not
|
||||||
|
interested in") applied to the revision being tested.
|
||||||
|
|
||||||
|
To cope with such a situation, after the inner 'git bisect' finds the
|
||||||
|
next revision to test, the script can apply the patch
|
||||||
|
before compiling, run the real test, and afterwards decide if the
|
||||||
|
revision (possibly with the needed patch) passed the test and then
|
||||||
|
rewind the tree to the pristine state. Finally the script should exit
|
||||||
|
with the status of the real test to let the `git bisect run` command loop
|
||||||
|
determine the eventual outcome of the bisect session.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--no-checkout::
|
||||||
|
+
|
||||||
|
Do not checkout the new working tree at each iteration of the bisection
|
||||||
|
process. Instead just update the reference named `BISECT_HEAD` to make
|
||||||
|
it point to the commit that should be tested.
|
||||||
|
+
|
||||||
|
This option may be useful when the test you would perform in each step
|
||||||
|
does not require a checked out tree.
|
||||||
|
+
|
||||||
|
If the repository is bare, `--no-checkout` is assumed.
|
||||||
|
|
||||||
|
--first-parent::
|
||||||
|
+
|
||||||
|
Follow only the first parent commit upon seeing a merge commit.
|
||||||
|
+
|
||||||
|
In detecting regressions introduced through the merging of a branch, the merge
|
||||||
|
commit will be identified as introduction of the bug and its ancestors will be
|
||||||
|
ignored.
|
||||||
|
+
|
||||||
|
This option is particularly useful in avoiding false positives when a merged
|
||||||
|
branch contained broken or non-buildable commits, but the merge itself was OK.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Automatically bisect a broken build between v1.2 and HEAD:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git bisect start HEAD v1.2 -- # HEAD is bad, v1.2 is good
|
||||||
|
$ git bisect run make # "make" builds the app
|
||||||
|
$ git bisect reset # quit the bisect session
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Automatically bisect a test failure between origin and HEAD:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git bisect start HEAD origin -- # HEAD is bad, origin is good
|
||||||
|
$ git bisect run make test # "make test" builds and tests
|
||||||
|
$ git bisect reset # quit the bisect session
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Automatically bisect a broken test case:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat ~/test.sh
|
||||||
|
#!/bin/sh
|
||||||
|
make || exit 125 # this skips broken builds
|
||||||
|
~/check_test_case.sh # does the test case pass?
|
||||||
|
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
||||||
|
$ git bisect run ~/test.sh
|
||||||
|
$ git bisect reset # quit the bisect session
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
Here we use a `test.sh` custom script. In this script, if `make`
|
||||||
|
fails, we skip the current commit.
|
||||||
|
`check_test_case.sh` should `exit 0` if the test case passes,
|
||||||
|
and `exit 1` otherwise.
|
||||||
|
+
|
||||||
|
It is safer if both `test.sh` and `check_test_case.sh` are
|
||||||
|
outside the repository to prevent interactions between the bisect,
|
||||||
|
make and test processes and the scripts.
|
||||||
|
|
||||||
|
* Automatically bisect with temporary modifications (hot-fix):
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat ~/test.sh
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# tweak the working tree by merging the hot-fix branch
|
||||||
|
# and then attempt a build
|
||||||
|
if git merge --no-commit --no-ff hot-fix &&
|
||||||
|
make
|
||||||
|
then
|
||||||
|
# run project specific test and report its status
|
||||||
|
~/check_test_case.sh
|
||||||
|
status=$?
|
||||||
|
else
|
||||||
|
# tell the caller this is untestable
|
||||||
|
status=125
|
||||||
|
fi
|
||||||
|
|
||||||
|
# undo the tweak to allow clean flipping to the next commit
|
||||||
|
git reset --hard
|
||||||
|
|
||||||
|
# return control
|
||||||
|
exit $status
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
This applies modifications from a hot-fix branch before each test run,
|
||||||
|
e.g. in case your build or test environment changed so that older
|
||||||
|
revisions may need a fix which newer ones have already. (Make sure the
|
||||||
|
hot-fix branch is based off a commit which is contained in all revisions
|
||||||
|
which you are bisecting, so that the merge does not pull in too much, or
|
||||||
|
use `git cherry-pick` instead of `git merge`.)
|
||||||
|
|
||||||
|
* Automatically bisect a broken test case:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
||||||
|
$ git bisect run sh -c "make || exit 125; ~/check_test_case.sh"
|
||||||
|
$ git bisect reset # quit the bisect session
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
This shows that you can do without a run script if you write the test
|
||||||
|
on a single line.
|
||||||
|
|
||||||
|
* Locate a good region of the object graph in a damaged repository
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git bisect start HEAD <known-good-commit> [ <boundary-commit> ... ] --no-checkout
|
||||||
|
$ git bisect run sh -c '
|
||||||
|
GOOD=$(git for-each-ref "--format=%(objectname)" refs/bisect/good-*) &&
|
||||||
|
git rev-list --objects BISECT_HEAD --not $GOOD >tmp.$$ &&
|
||||||
|
git pack-objects --stdout >/dev/null <tmp.$$
|
||||||
|
rc=$?
|
||||||
|
rm -f tmp.$$
|
||||||
|
test $rc = 0'
|
||||||
|
|
||||||
|
$ git bisect reset # quit the bisect session
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
In this case, when 'git bisect run' finishes, bisect/bad will refer to a commit that
|
||||||
|
has at least one parent whose reachable graph is fully traversable in the sense
|
||||||
|
required by 'git pack objects'.
|
||||||
|
|
||||||
|
* Look for a fix instead of a regression in the code
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git bisect start
|
||||||
|
$ git bisect new HEAD # current commit is marked as new
|
||||||
|
$ git bisect old HEAD~10 # the tenth commit from now is marked as old
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
or:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git bisect start --term-old broken --term-new fixed
|
||||||
|
$ git bisect fixed
|
||||||
|
$ git bisect broken HEAD~10
|
||||||
|
------------
|
||||||
|
|
||||||
|
Getting help
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Use `git bisect` to get a short usage description, and `git bisect
|
||||||
|
help` or `git bisect -h` to get a long usage description.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
link:git-bisect-lk2009.html[Fighting regressions with git bisect],
|
||||||
|
linkgit:git-blame[1].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
262
app/src/main/assets/manpages/git-blame.txt
Normal file
262
app/src/main/assets/manpages/git-blame.txt
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
git-blame(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-blame - Show what revision and author last modified each line of a file
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
|
||||||
|
[-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
|
||||||
|
[--ignore-rev <rev>] [--ignore-revs-file <file>]
|
||||||
|
[--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
|
||||||
|
[ --contents <file> ] [<rev> | --reverse <rev>..<rev>] [--] <file>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Annotates each line in the given file with information from the revision which
|
||||||
|
last modified the line. Optionally, start annotating from the given revision.
|
||||||
|
|
||||||
|
When specified one or more times, `-L` restricts annotation to the requested
|
||||||
|
lines.
|
||||||
|
|
||||||
|
The origin of lines is automatically followed across whole-file
|
||||||
|
renames (currently there is no option to turn the rename-following
|
||||||
|
off). To follow lines moved from one file to another, or to follow
|
||||||
|
lines that were copied and pasted from another file, etc., see the
|
||||||
|
`-C` and `-M` options.
|
||||||
|
|
||||||
|
The report does not tell you anything about lines which have been deleted or
|
||||||
|
replaced; you need to use a tool such as `git diff` or the "pickaxe"
|
||||||
|
interface briefly mentioned in the following paragraph.
|
||||||
|
|
||||||
|
Apart from supporting file annotation, Git also supports searching the
|
||||||
|
development history for when a code snippet occurred in a change. This makes it
|
||||||
|
possible to track when a code snippet was added to a file, moved or copied
|
||||||
|
between files, and eventually deleted or replaced. It works by searching for
|
||||||
|
a text string in the diff. A small example of the pickaxe interface
|
||||||
|
that searches for `blame_usage`:
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
$ git log --pretty=oneline -S'blame_usage'
|
||||||
|
5040f17eba15504bad66b14a645bddd9b015ebb7 blame -S <ancestry-file>
|
||||||
|
ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::blame-options.adoc[]
|
||||||
|
|
||||||
|
`-c`::
|
||||||
|
Use the same output mode as linkgit:git-annotate[1] (Default: off).
|
||||||
|
|
||||||
|
`--score-debug`::
|
||||||
|
Include debugging information related to the movement of
|
||||||
|
lines between files (see `-C`) and lines moved within a
|
||||||
|
file (see `-M`). The first number listed is the score.
|
||||||
|
This is the number of alphanumeric characters detected
|
||||||
|
as having been moved between or within files. This must be above
|
||||||
|
a certain threshold for `git blame` to consider those lines
|
||||||
|
of code to have been moved.
|
||||||
|
|
||||||
|
`-f`::
|
||||||
|
`--show-name`::
|
||||||
|
Show the filename in the original commit. By default
|
||||||
|
the filename is shown if there is any line that came from a
|
||||||
|
file with a different name, due to rename detection.
|
||||||
|
|
||||||
|
`-n`::
|
||||||
|
`--show-number`::
|
||||||
|
Show the line number in the original commit (Default: off).
|
||||||
|
|
||||||
|
`-s`::
|
||||||
|
Suppress the author name and timestamp from the output.
|
||||||
|
|
||||||
|
`-e`::
|
||||||
|
`--show-email`::
|
||||||
|
Show the author email instead of the author name (Default: off).
|
||||||
|
This can also be controlled via the `blame.showEmail` config
|
||||||
|
option.
|
||||||
|
|
||||||
|
`-w`::
|
||||||
|
Ignore whitespace when comparing the parent's version and
|
||||||
|
the child's to find where the lines came from.
|
||||||
|
|
||||||
|
include::diff-algorithm-option.adoc[]
|
||||||
|
|
||||||
|
`--abbrev=<n>`::
|
||||||
|
Instead of using the default _7+1_ hexadecimal digits as the
|
||||||
|
abbreviated object name, use _<m>+1_ digits, where _<m>_ is at
|
||||||
|
least _<n>_ but ensures the commit object names are unique.
|
||||||
|
Note that 1 column
|
||||||
|
is used for a caret to mark the boundary commit.
|
||||||
|
|
||||||
|
|
||||||
|
THE DEFAULT FORMAT
|
||||||
|
------------------
|
||||||
|
|
||||||
|
When neither `--porcelain` nor `--incremental` option is specified,
|
||||||
|
`git blame` will output annotation for each line with:
|
||||||
|
|
||||||
|
- abbreviated object name for the commit the line came from;
|
||||||
|
- author ident (by default the author name and date, unless `-s` or `-e`
|
||||||
|
is specified); and
|
||||||
|
- line number
|
||||||
|
|
||||||
|
before the line contents.
|
||||||
|
|
||||||
|
THE PORCELAIN FORMAT
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
In this format, each line is output after a header; the
|
||||||
|
header at the minimum has the first line which has:
|
||||||
|
|
||||||
|
- 40-byte SHA-1 of the commit the line is attributed to;
|
||||||
|
- the line number of the line in the original file;
|
||||||
|
- the line number of the line in the final file;
|
||||||
|
- on a line that starts a group of lines from a different
|
||||||
|
commit than the previous one, the number of lines in this
|
||||||
|
group. On subsequent lines this field is absent.
|
||||||
|
|
||||||
|
This header line is followed by the following information
|
||||||
|
at least once for each commit:
|
||||||
|
|
||||||
|
- the author name (`author`), email (`author-mail`), time
|
||||||
|
(`author-time`), and time zone (`author-tz`); similarly
|
||||||
|
for committer.
|
||||||
|
- the filename in the commit that the line is attributed to.
|
||||||
|
- the first line of the commit log message (`summary`).
|
||||||
|
|
||||||
|
The contents of the actual line are output after the above
|
||||||
|
header, prefixed by a _TAB_. This is to allow adding more
|
||||||
|
header elements later.
|
||||||
|
|
||||||
|
The porcelain format generally suppresses commit information that has
|
||||||
|
already been seen. For example, two lines that are blamed to the same
|
||||||
|
commit will both be shown, but the details for that commit will be shown
|
||||||
|
only once. Information which is specific to individual lines will not be
|
||||||
|
grouped together, like revs to be marked `ignored` or `unblamable`. This
|
||||||
|
is more efficient, but may require more state be kept by the reader. The
|
||||||
|
`--line-porcelain` option can be used to output full commit information
|
||||||
|
for each line, allowing simpler (but less efficient) usage like:
|
||||||
|
|
||||||
|
# count the number of lines attributed to each author
|
||||||
|
git blame --line-porcelain file |
|
||||||
|
sed -n 's/^author //p' |
|
||||||
|
sort | uniq -c | sort -rn
|
||||||
|
|
||||||
|
|
||||||
|
SPECIFYING RANGES
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Unlike `git blame` and `git annotate` in older versions of git, the extent
|
||||||
|
of the annotation can be limited to both line ranges and revision
|
||||||
|
ranges. The `-L` option, which limits annotation to a range of lines, may be
|
||||||
|
specified multiple times.
|
||||||
|
|
||||||
|
When you are interested in finding the origin for
|
||||||
|
lines 40-60 for file `foo`, you can use the `-L` option like so
|
||||||
|
(they mean the same thing -- both ask for 21 lines starting at
|
||||||
|
line 40):
|
||||||
|
|
||||||
|
git blame -L 40,60 foo
|
||||||
|
git blame -L 40,+21 foo
|
||||||
|
|
||||||
|
Also you can use a regular expression to specify the line range:
|
||||||
|
|
||||||
|
git blame -L '/^sub hello {/,/^}$/' foo
|
||||||
|
|
||||||
|
which limits the annotation to the body of the `hello` subroutine.
|
||||||
|
|
||||||
|
When you are not interested in changes older than version
|
||||||
|
v2.6.18, or changes older than 3 weeks, you can use revision
|
||||||
|
range specifiers similar to `git rev-list`:
|
||||||
|
|
||||||
|
git blame v2.6.18.. -- foo
|
||||||
|
git blame --since=3.weeks -- foo
|
||||||
|
|
||||||
|
When revision range specifiers are used to limit the annotation,
|
||||||
|
lines that have not changed since the range boundary (either the
|
||||||
|
commit v2.6.18 or the most recent commit that is more than 3
|
||||||
|
weeks old in the above example) are blamed for that range
|
||||||
|
boundary commit.
|
||||||
|
|
||||||
|
A particularly useful way is to see if an added file has lines
|
||||||
|
created by copy-and-paste from existing files. Sometimes this
|
||||||
|
indicates that the developer was being sloppy and did not
|
||||||
|
refactor the code properly. You can first find the commit that
|
||||||
|
introduced the file with:
|
||||||
|
|
||||||
|
git log --diff-filter=A --pretty=short -- foo
|
||||||
|
|
||||||
|
and then annotate the change between the commit and its
|
||||||
|
parents, using `commit^!` notation:
|
||||||
|
|
||||||
|
git blame -C -C -f $commit^! -- foo
|
||||||
|
|
||||||
|
|
||||||
|
INCREMENTAL OUTPUT
|
||||||
|
------------------
|
||||||
|
|
||||||
|
When called with `--incremental` option, the command outputs the
|
||||||
|
result as it is built. The output generally will talk about
|
||||||
|
lines touched by more recent commits first (i.e. the lines will
|
||||||
|
be annotated out of order) and is meant to be used by
|
||||||
|
interactive viewers.
|
||||||
|
|
||||||
|
The output format is similar to the Porcelain format, but it
|
||||||
|
does not contain the actual lines from the file that is being
|
||||||
|
annotated.
|
||||||
|
|
||||||
|
. Each blame entry always starts with a line of:
|
||||||
|
+
|
||||||
|
[synopsis]
|
||||||
|
<40-byte-hex-sha1> <sourceline> <resultline> <num-lines>
|
||||||
|
+
|
||||||
|
Line numbers count from 1.
|
||||||
|
|
||||||
|
. The first time that a commit shows up in the stream, it has various
|
||||||
|
other information about it printed out with a one-word tag at the
|
||||||
|
beginning of each line describing the extra commit information (author,
|
||||||
|
email, committer, dates, summary, etc.).
|
||||||
|
|
||||||
|
. Unlike the Porcelain format, the filename information is always
|
||||||
|
given and terminates the entry:
|
||||||
|
+
|
||||||
|
[synopsis]
|
||||||
|
filename <whitespace-quoted-filename-goes-here>
|
||||||
|
+
|
||||||
|
and thus it is really quite easy to parse for some line- and word-oriented
|
||||||
|
parser (which should be quite natural for most scripting languages).
|
||||||
|
+
|
||||||
|
[NOTE]
|
||||||
|
For people who do parsing: to make it more robust, just ignore any
|
||||||
|
lines between the first and last one (_<40-byte-hex-sha1>_ and `filename`
|
||||||
|
lines) where you do not recognize the tag words (or care about that particular
|
||||||
|
one) at the beginning of the "extended information" lines. That way, if
|
||||||
|
there is ever added information (like the commit encoding or extended
|
||||||
|
commit commentary), a blame viewer will not care.
|
||||||
|
|
||||||
|
|
||||||
|
MAPPING AUTHORS
|
||||||
|
---------------
|
||||||
|
|
||||||
|
See linkgit:gitmailmap[5].
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/blame.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-annotate[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
429
app/src/main/assets/manpages/git-branch.txt
Normal file
429
app/src/main/assets/manpages/git-branch.txt
Normal file
@@ -0,0 +1,429 @@
|
|||||||
|
git-branch(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-branch - List, create, or delete branches
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git branch [--color[=<when>] | --no-color] [--show-current]
|
||||||
|
[-v [--abbrev=<n> | --no-abbrev]]
|
||||||
|
[--column[=<options>] | --no-column] [--sort=<key>]
|
||||||
|
[--merged [<commit>]] [--no-merged [<commit>]]
|
||||||
|
[--contains [<commit>]] [--no-contains [<commit>]]
|
||||||
|
[--points-at <object>] [--format=<format>]
|
||||||
|
[(-r|--remotes) | (-a|--all)]
|
||||||
|
[--list] [<pattern>...]
|
||||||
|
git branch [--track[=(direct|inherit)] | --no-track] [-f]
|
||||||
|
[--recurse-submodules] <branch-name> [<start-point>]
|
||||||
|
git branch (--set-upstream-to=<upstream>|-u <upstream>) [<branch-name>]
|
||||||
|
git branch --unset-upstream [<branch-name>]
|
||||||
|
git branch (-m|-M) [<old-branch>] <new-branch>
|
||||||
|
git branch (-c|-C) [<old-branch>] <new-branch>
|
||||||
|
git branch (-d|-D) [-r] <branch-name>...
|
||||||
|
git branch --edit-description [<branch-name>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If `--list` is given, or if there are no non-option arguments, existing
|
||||||
|
branches are listed; the current branch will be highlighted in green and
|
||||||
|
marked with an asterisk. Any branches checked out in linked worktrees will
|
||||||
|
be highlighted in cyan and marked with a plus sign. Option `-r` causes the
|
||||||
|
remote-tracking branches to be listed,
|
||||||
|
and option `-a` shows both local and remote branches.
|
||||||
|
|
||||||
|
If a `<pattern>`
|
||||||
|
is given, it is used as a shell wildcard to restrict the output to
|
||||||
|
matching branches. If multiple patterns are given, a branch is shown if
|
||||||
|
it matches any of the patterns.
|
||||||
|
|
||||||
|
Note that when providing a
|
||||||
|
`<pattern>`, you must use `--list`; otherwise the command may be interpreted
|
||||||
|
as branch creation.
|
||||||
|
|
||||||
|
With `--contains`, shows only the branches that contain the named commit
|
||||||
|
(in other words, the branches whose tip commits are descendants of the
|
||||||
|
named commit), `--no-contains` inverts it. With `--merged`, only branches
|
||||||
|
merged into the named commit (i.e. the branches whose tip commits are
|
||||||
|
reachable from the named commit) will be listed. With `--no-merged` only
|
||||||
|
branches not merged into the named commit will be listed. If the _<commit>_
|
||||||
|
argument is missing it defaults to `HEAD` (i.e. the tip of the current
|
||||||
|
branch).
|
||||||
|
|
||||||
|
The command's second form creates a new branch head named _<branch-name>_
|
||||||
|
which points to the current `HEAD`, or _<start-point>_ if given. As a
|
||||||
|
special case, for _<start-point>_, you may use `<rev-A>...<rev-B>` as a
|
||||||
|
shortcut for the merge base of _<rev-A>_ and _<rev-B>_ if there is exactly
|
||||||
|
one merge base. You can leave out at most one of _<rev-A>_ and _<rev-B>_,
|
||||||
|
in which case it defaults to `HEAD`.
|
||||||
|
|
||||||
|
Note that this will create the new branch, but it will not switch the
|
||||||
|
working tree to it; use `git switch <new-branch>` to switch to the
|
||||||
|
new branch.
|
||||||
|
|
||||||
|
When a local branch is started off a remote-tracking branch, Git sets up the
|
||||||
|
branch (specifically the `branch.<name>.remote` and `branch.<name>.merge`
|
||||||
|
configuration entries) so that `git pull` will appropriately merge from
|
||||||
|
the remote-tracking branch. This behavior may be changed via the global
|
||||||
|
`branch.autoSetupMerge` configuration flag. That setting can be
|
||||||
|
overridden by using the `--track` and `--no-track` options, and
|
||||||
|
changed later using `git branch --set-upstream-to`.
|
||||||
|
|
||||||
|
With a `-m` or `-M` option, _<old-branch>_ will be renamed to _<new-branch>_.
|
||||||
|
If _<old-branch>_ had a corresponding reflog, it is renamed to match
|
||||||
|
_<new-branch>_, and a reflog entry is created to remember the branch
|
||||||
|
renaming. If _<new-branch>_ exists, `-M` must be used to force the rename
|
||||||
|
to happen.
|
||||||
|
|
||||||
|
The `-c` and `-C` options have the exact same semantics as `-m` and
|
||||||
|
`-M`, except instead of the branch being renamed, it will be copied to a
|
||||||
|
new name, along with its config and reflog.
|
||||||
|
|
||||||
|
With a `-d` or `-D` option, _<branch-name>_ will be deleted. You may
|
||||||
|
specify more than one branch for deletion. If the branch currently
|
||||||
|
has a reflog then the reflog will also be deleted.
|
||||||
|
|
||||||
|
Use `-r` together with `-d` to delete remote-tracking branches. Note, that it
|
||||||
|
only makes sense to delete remote-tracking branches if they no longer exist
|
||||||
|
in the remote repository or if `git fetch` was configured not to fetch
|
||||||
|
them again. See also the `prune` subcommand of linkgit:git-remote[1] for a
|
||||||
|
way to clean up all obsolete remote-tracking branches.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`-d`::
|
||||||
|
`--delete`::
|
||||||
|
Delete a branch. The branch must be fully merged in its
|
||||||
|
upstream branch, or in `HEAD` if no upstream was set with
|
||||||
|
`--track` or `--set-upstream-to`.
|
||||||
|
|
||||||
|
`-D`::
|
||||||
|
Shortcut for `--delete --force`.
|
||||||
|
|
||||||
|
`--create-reflog`::
|
||||||
|
Create the branch's reflog. This activates recording of
|
||||||
|
all changes made to the branch ref, enabling use of date
|
||||||
|
based sha1 expressions such as `<branch-name>@{yesterday}`.
|
||||||
|
Note that in non-bare repositories, reflogs are usually
|
||||||
|
enabled by default by the `core.logAllRefUpdates` config option.
|
||||||
|
The negated form `--no-create-reflog` only overrides an earlier
|
||||||
|
`--create-reflog`, but currently does not negate the setting of
|
||||||
|
`core.logAllRefUpdates`.
|
||||||
|
|
||||||
|
`-f`::
|
||||||
|
`--force`::
|
||||||
|
Reset _<branch-name>_ to _<start-point>_, even if _<branch-name>_ exists
|
||||||
|
already. Without `-f`, `git branch` refuses to change an existing branch.
|
||||||
|
In combination with `-d` (or `--delete`), allow deleting the
|
||||||
|
branch irrespective of its merged status, or whether it even
|
||||||
|
points to a valid commit. In combination with
|
||||||
|
`-m` (or `--move`), allow renaming the branch even if the new
|
||||||
|
branch name already exists, the same applies for `-c` (or `--copy`).
|
||||||
|
+
|
||||||
|
Note that `git branch -f <branch-name> [<start-point>]`, even with `-f`,
|
||||||
|
refuses to change an existing branch _<branch-name>_ that is checked out
|
||||||
|
in another worktree linked to the same repository.
|
||||||
|
|
||||||
|
`-m`::
|
||||||
|
`--move`::
|
||||||
|
Move/rename a branch, together with its config and reflog.
|
||||||
|
|
||||||
|
`-M`::
|
||||||
|
Shortcut for `--move --force`.
|
||||||
|
|
||||||
|
`-c`::
|
||||||
|
`--copy`::
|
||||||
|
Copy a branch, together with its config and reflog.
|
||||||
|
|
||||||
|
`-C`::
|
||||||
|
Shortcut for `--copy --force`.
|
||||||
|
|
||||||
|
`--color[=<when>]`::
|
||||||
|
Color branches to highlight current, local, and
|
||||||
|
remote-tracking branches.
|
||||||
|
The value must be `always` (the default), `never`, or `auto`.
|
||||||
|
|
||||||
|
`--no-color`::
|
||||||
|
Turn off branch colors, even when the configuration file gives the
|
||||||
|
default to color output.
|
||||||
|
Same as `--color=never`.
|
||||||
|
|
||||||
|
`-i`::
|
||||||
|
`--ignore-case`::
|
||||||
|
Sorting and filtering branches are case insensitive.
|
||||||
|
|
||||||
|
`--omit-empty`::
|
||||||
|
Do not print a newline after formatted refs where the format expands
|
||||||
|
to the empty string.
|
||||||
|
|
||||||
|
`--column[=<options>]`::
|
||||||
|
`--no-column`::
|
||||||
|
Display branch listing in columns. See configuration variable
|
||||||
|
`column.branch` for option syntax. `--column` and `--no-column`
|
||||||
|
without options are equivalent to `always` and `never` respectively.
|
||||||
|
+
|
||||||
|
This option is only applicable in non-verbose mode.
|
||||||
|
|
||||||
|
`--sort=<key>`::
|
||||||
|
Sort based on _<key>_. Prefix `-` to sort in descending
|
||||||
|
order of the value. You may use the `--sort=<key>` option
|
||||||
|
multiple times, in which case the last key becomes the primary
|
||||||
|
key. The keys supported are the same as those in linkgit:git-for-each-ref[1].
|
||||||
|
Sort order defaults to the value configured for the
|
||||||
|
`branch.sort` variable if it exists, or to sorting based on the
|
||||||
|
full refname (including `refs/...` prefix). This lists
|
||||||
|
detached `HEAD` (if present) first, then local branches and
|
||||||
|
finally remote-tracking branches. See linkgit:git-config[1].
|
||||||
|
|
||||||
|
`-r`::
|
||||||
|
`--remotes`::
|
||||||
|
List or delete (if used with `-d`) the remote-tracking branches.
|
||||||
|
Combine with `--list` to match the optional pattern(s).
|
||||||
|
|
||||||
|
`-a`::
|
||||||
|
`--all`::
|
||||||
|
List both remote-tracking branches and local branches.
|
||||||
|
Combine with `--list` to match optional pattern(s).
|
||||||
|
|
||||||
|
`-l`::
|
||||||
|
`--list`::
|
||||||
|
List branches. With optional `<pattern>...`, e.g. `git
|
||||||
|
branch --list 'maint-*'`, list only the branches that match
|
||||||
|
the pattern(s).
|
||||||
|
|
||||||
|
`--show-current`::
|
||||||
|
Print the name of the current branch. In detached `HEAD` state,
|
||||||
|
nothing is printed.
|
||||||
|
|
||||||
|
`-v`::
|
||||||
|
`-vv`::
|
||||||
|
`--verbose`::
|
||||||
|
When in list mode,
|
||||||
|
show sha1 and commit subject line for each head, along with
|
||||||
|
relationship to upstream branch (if any). If given twice, print
|
||||||
|
the path of the linked worktree (if any) and the name of the upstream
|
||||||
|
branch, as well (see also `git remote show <remote>`). Note that the
|
||||||
|
current worktree's `HEAD` will not have its path printed (it will always
|
||||||
|
be your current directory).
|
||||||
|
|
||||||
|
`-q`::
|
||||||
|
`--quiet`::
|
||||||
|
Be more quiet when creating or deleting a branch, suppressing
|
||||||
|
non-error messages.
|
||||||
|
|
||||||
|
`--abbrev=<n>`::
|
||||||
|
In the verbose listing that show the commit object name,
|
||||||
|
show the shortest prefix that is at least _<n>_ hexdigits
|
||||||
|
long that uniquely refers the object.
|
||||||
|
The default value is 7 and can be overridden by the `core.abbrev`
|
||||||
|
config option.
|
||||||
|
|
||||||
|
`--no-abbrev`::
|
||||||
|
Display the full sha1s in the output listing rather than abbreviating them.
|
||||||
|
|
||||||
|
`-t`::
|
||||||
|
`--track[=(direct|inherit)]`::
|
||||||
|
When creating a new branch, set up `branch.<name>.remote` and
|
||||||
|
`branch.<name>.merge` configuration entries to set "upstream" tracking
|
||||||
|
configuration for the new branch. This
|
||||||
|
configuration will tell git to show the relationship between the
|
||||||
|
two branches in `git status` and `git branch -v`. Furthermore,
|
||||||
|
it directs `git pull` without arguments to pull from the
|
||||||
|
upstream when the new branch is checked out.
|
||||||
|
+
|
||||||
|
The exact upstream branch is chosen depending on the optional argument:
|
||||||
|
`-t`, `--track`, or `--track=direct` means to use the start-point branch
|
||||||
|
itself as the upstream; `--track=inherit` means to copy the upstream
|
||||||
|
configuration of the start-point branch.
|
||||||
|
+
|
||||||
|
The `branch.autoSetupMerge` configuration variable specifies how `git switch`,
|
||||||
|
`git checkout` and `git branch` should behave when neither `--track` nor
|
||||||
|
`--no-track` are specified:
|
||||||
|
+
|
||||||
|
The default option, `true`, behaves as though `--track=direct`
|
||||||
|
were given whenever the start-point is a remote-tracking branch.
|
||||||
|
`false` behaves as if `--no-track` were given. `always` behaves as though
|
||||||
|
`--track=direct` were given. `inherit` behaves as though `--track=inherit`
|
||||||
|
were given. `simple` behaves as though `--track=direct` were given only when
|
||||||
|
the _<start-point>_ is a remote-tracking branch and the new branch has the same
|
||||||
|
name as the remote branch.
|
||||||
|
+
|
||||||
|
See linkgit:git-pull[1] and linkgit:git-config[1] for additional discussion on
|
||||||
|
how the `branch.<name>.remote` and `branch.<name>.merge` options are used.
|
||||||
|
|
||||||
|
`--no-track`::
|
||||||
|
Do not set up "upstream" configuration, even if the
|
||||||
|
`branch.autoSetupMerge` configuration variable is set.
|
||||||
|
|
||||||
|
`--recurse-submodules`::
|
||||||
|
THIS OPTION IS EXPERIMENTAL! Cause the current command to
|
||||||
|
recurse into submodules if `submodule.propagateBranches` is
|
||||||
|
enabled. See `submodule.propagateBranches` in
|
||||||
|
linkgit:git-config[1]. Currently, only branch creation is
|
||||||
|
supported.
|
||||||
|
+
|
||||||
|
When used in branch creation, a new branch _<branch-name>_ will be created
|
||||||
|
in the superproject and all of the submodules in the superproject's
|
||||||
|
_<start-point>_. In submodules, the branch will point to the submodule
|
||||||
|
commit in the superproject's _<start-point>_ but the branch's tracking
|
||||||
|
information will be set up based on the submodule's branches and remotes
|
||||||
|
e.g. `git branch --recurse-submodules topic origin/main` will create the
|
||||||
|
submodule branch "topic" that points to the submodule commit in the
|
||||||
|
superproject's "origin/main", but tracks the submodule's "origin/main".
|
||||||
|
|
||||||
|
`--set-upstream`::
|
||||||
|
As this option had confusing syntax, it is no longer supported.
|
||||||
|
Please use `--track` or `--set-upstream-to` instead.
|
||||||
|
|
||||||
|
`-u <upstream>`::
|
||||||
|
`--set-upstream-to=<upstream>`::
|
||||||
|
Set up _<branch-name>_'s tracking information so _<upstream>_ is
|
||||||
|
considered _<branch-name>_'s upstream branch. If no _<branch-name>_
|
||||||
|
is specified, then it defaults to the current branch.
|
||||||
|
|
||||||
|
`--unset-upstream`::
|
||||||
|
Remove the upstream information for _<branch-name>_. If no branch
|
||||||
|
is specified it defaults to the current branch.
|
||||||
|
|
||||||
|
`--edit-description`::
|
||||||
|
Open an editor and edit the text to explain what the branch is
|
||||||
|
for, to be used by various other commands (e.g. `format-patch`,
|
||||||
|
`request-pull`, and `merge` (if enabled)). Multi-line explanations
|
||||||
|
may be used.
|
||||||
|
|
||||||
|
`--contains [<commit>]`::
|
||||||
|
Only list branches which contain _<commit>_ (`HEAD`
|
||||||
|
if not specified). Implies `--list`.
|
||||||
|
|
||||||
|
`--no-contains [<commit>]`::
|
||||||
|
Only list branches which don't contain _<commit>_
|
||||||
|
(`HEAD` if not specified). Implies `--list`.
|
||||||
|
|
||||||
|
`--merged [<commit>]`::
|
||||||
|
Only list branches whose tips are reachable from
|
||||||
|
_<commit>_ (`HEAD` if not specified). Implies `--list`.
|
||||||
|
|
||||||
|
`--no-merged [<commit>]`::
|
||||||
|
Only list branches whose tips are not reachable from
|
||||||
|
_<commit>_ (`HEAD` if not specified). Implies `--list`.
|
||||||
|
|
||||||
|
`--points-at <object>`::
|
||||||
|
Only list branches of _<object>_.
|
||||||
|
|
||||||
|
`--format <format>`::
|
||||||
|
A string that interpolates `%(fieldname)` from a branch ref being shown
|
||||||
|
and the object it points at. _<format>_ is the same as
|
||||||
|
that of linkgit:git-for-each-ref[1].
|
||||||
|
|
||||||
|
_<branch-name>_::
|
||||||
|
The name of the branch to create or delete.
|
||||||
|
The new branch name must pass all checks defined by
|
||||||
|
linkgit:git-check-ref-format[1]. Some of these checks
|
||||||
|
may restrict the characters allowed in a branch name.
|
||||||
|
|
||||||
|
_<start-point>_::
|
||||||
|
The new branch head will point to this commit. It may be
|
||||||
|
given as a branch name, a commit-id, or a tag. If this
|
||||||
|
option is omitted, the current `HEAD` will be used instead.
|
||||||
|
|
||||||
|
_<old-branch>_::
|
||||||
|
The name of an existing branch. If this option is omitted,
|
||||||
|
the name of the current branch will be used instead.
|
||||||
|
|
||||||
|
_<new-branch>_::
|
||||||
|
The new name for an existing branch. The same restrictions as for
|
||||||
|
_<branch-name>_ apply.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
`pager.branch` is only respected when listing branches, i.e., when
|
||||||
|
`--list` is used or implied. The default is to use a pager.
|
||||||
|
See linkgit:git-config[1].
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-rest.adoc[]
|
||||||
|
|
||||||
|
include::config/branch.adoc[]
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Start development from a known tag::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
|
||||||
|
$ cd my2.6
|
||||||
|
$ git branch my2.6.14 v2.6.14 <1>
|
||||||
|
$ git switch my2.6.14
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> This step and the next one could be combined into a single step with
|
||||||
|
"checkout -b my2.6.14 v2.6.14".
|
||||||
|
|
||||||
|
Delete an unneeded branch::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone git://git.kernel.org/.../git.git my.git
|
||||||
|
$ cd my.git
|
||||||
|
$ git branch -d -r origin/todo origin/html origin/man <1>
|
||||||
|
$ git branch -D test <2>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Delete the remote-tracking branches "todo", "html" and "man". The next
|
||||||
|
`git fetch` or `git pull` will create them again unless you configure them not to.
|
||||||
|
See linkgit:git-fetch[1].
|
||||||
|
<2> Delete the "test" branch even if the "master" branch (or whichever branch
|
||||||
|
is currently checked out) does not have all commits from the test branch.
|
||||||
|
|
||||||
|
Listing branches from a specific remote::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git branch -r -l '<remote>/<pattern>' <1>
|
||||||
|
$ git for-each-ref 'refs/remotes/<remote>/<pattern>' <2>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Using `-a` would conflate _<remote>_ with any local branches you happen to
|
||||||
|
have been prefixed with the same _<remote>_ pattern.
|
||||||
|
<2> `for-each-ref` can take a wide range of options. See linkgit:git-for-each-ref[1]
|
||||||
|
|
||||||
|
Patterns will normally need quoting.
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
-----
|
||||||
|
|
||||||
|
If you are creating a branch that you want to switch to immediately,
|
||||||
|
it is easier to use the `git switch` command with its `-c` option to
|
||||||
|
do the same thing with a single command.
|
||||||
|
|
||||||
|
The options `--contains`, `--no-contains`, `--merged` and `--no-merged`
|
||||||
|
serve four related but different purposes:
|
||||||
|
|
||||||
|
- `--contains <commit>` is used to find all branches which will need
|
||||||
|
special attention if _<commit>_ were to be rebased or amended, since those
|
||||||
|
branches contain the specified _<commit>_.
|
||||||
|
|
||||||
|
- `--no-contains <commit>` is the inverse of that, i.e. branches that don't
|
||||||
|
contain the specified _<commit>_.
|
||||||
|
|
||||||
|
- `--merged` is used to find all branches which can be safely deleted,
|
||||||
|
since those branches are fully contained by `HEAD`.
|
||||||
|
|
||||||
|
- `--no-merged` is used to find branches which are candidates for merging
|
||||||
|
into `HEAD`, since those branches are not fully contained by `HEAD`.
|
||||||
|
|
||||||
|
include::ref-reachability-filters.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-check-ref-format[1],
|
||||||
|
linkgit:git-fetch[1],
|
||||||
|
linkgit:git-remote[1],
|
||||||
|
link:user-manual.html#what-is-a-branch["Understanding history: What is
|
||||||
|
a branch?"] in the Git User's Manual.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
77
app/src/main/assets/manpages/git-bugreport.txt
Normal file
77
app/src/main/assets/manpages/git-bugreport.txt
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
git-bugreport(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-bugreport - Collect information for user to file a bug report
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git bugreport' [(-o | --output-directory) <path>]
|
||||||
|
[(-s | --suffix) <format> | --no-suffix]
|
||||||
|
[--diagnose[=<mode>]]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Collects information about the user's machine, Git client, and repository
|
||||||
|
state, in addition to a form requesting information about the behavior the
|
||||||
|
user observed, and stores it in a single text file which the user can then
|
||||||
|
share, for example to the Git mailing list, in order to report an observed
|
||||||
|
bug.
|
||||||
|
|
||||||
|
The following information is requested from the user:
|
||||||
|
|
||||||
|
- Reproduction steps
|
||||||
|
- Expected behavior
|
||||||
|
- Actual behavior
|
||||||
|
|
||||||
|
The following information is captured automatically:
|
||||||
|
|
||||||
|
- 'git version --build-options'
|
||||||
|
- uname sysname, release, version, and machine strings
|
||||||
|
- Compiler-specific info string
|
||||||
|
- A list of enabled hooks
|
||||||
|
- $SHELL
|
||||||
|
|
||||||
|
Additional information may be gathered into a separate zip archive using the
|
||||||
|
`--diagnose` option, and can be attached alongside the bugreport document to
|
||||||
|
provide additional context to readers.
|
||||||
|
|
||||||
|
This tool is invoked via the typical Git setup process, which means that in some
|
||||||
|
cases, it might not be able to launch - for example, if a relevant config file
|
||||||
|
is unreadable. In this kind of scenario, it may be helpful to manually gather
|
||||||
|
the kind of information listed above when manually asking for help.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-o <path>::
|
||||||
|
--output-directory <path>::
|
||||||
|
Place the resulting bug report file in `<path>` instead of the current
|
||||||
|
directory.
|
||||||
|
|
||||||
|
-s <format>::
|
||||||
|
--suffix <format>::
|
||||||
|
--no-suffix::
|
||||||
|
Specify an alternate suffix for the bugreport name, to create a file
|
||||||
|
named 'git-bugreport-<formatted-suffix>'. This should take the form of a
|
||||||
|
strftime(3) format string; the current local time will be used.
|
||||||
|
`--no-suffix` disables the suffix and the file is just named
|
||||||
|
`git-bugreport` without any disambiguation measure.
|
||||||
|
|
||||||
|
--no-diagnose::
|
||||||
|
--diagnose[=<mode>]::
|
||||||
|
Create a zip archive of supplemental information about the user's
|
||||||
|
machine, Git client, and repository state. The archive is written to the
|
||||||
|
same output directory as the bug report and is named
|
||||||
|
'git-diagnostics-<formatted-suffix>'.
|
||||||
|
+
|
||||||
|
Without `mode` specified, the diagnostic archive will contain the default set of
|
||||||
|
statistics reported by `git diagnose`. An optional `mode` value may be specified
|
||||||
|
to change which information is included in the archive. See
|
||||||
|
linkgit:git-diagnose[1] for the list of valid values for `mode` and details
|
||||||
|
about their usage.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
372
app/src/main/assets/manpages/git-bundle.txt
Normal file
372
app/src/main/assets/manpages/git-bundle.txt
Normal file
@@ -0,0 +1,372 @@
|
|||||||
|
git-bundle(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-bundle - Move objects and refs by archive
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git bundle' create [-q | --quiet | --progress]
|
||||||
|
[--version=<version>] <file> <git-rev-list-args>
|
||||||
|
'git bundle' verify [-q | --quiet] <file>
|
||||||
|
'git bundle' list-heads <file> [<refname>...]
|
||||||
|
'git bundle' unbundle [--progress] <file> [<refname>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Create, unpack, and manipulate "bundle" files. Bundles are used for
|
||||||
|
the "offline" transfer of Git objects without an active "server"
|
||||||
|
sitting on the other side of the network connection.
|
||||||
|
|
||||||
|
They can be used to create both incremental and full backups of a
|
||||||
|
repository (see the "full backup" example in "EXAMPLES"), and to relay
|
||||||
|
the state of the references in one repository to another (see the second
|
||||||
|
example).
|
||||||
|
|
||||||
|
Git commands that fetch or otherwise "read" via protocols such as
|
||||||
|
`ssh://` and `https://` can also operate on bundle files. It is
|
||||||
|
possible linkgit:git-clone[1] a new repository from a bundle, to use
|
||||||
|
linkgit:git-fetch[1] to fetch from one, and to list the references
|
||||||
|
contained within it with linkgit:git-ls-remote[1]. There's no
|
||||||
|
corresponding "write" support, i.e. a 'git push' into a bundle is not
|
||||||
|
supported.
|
||||||
|
|
||||||
|
BUNDLE FORMAT
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Bundles are `.pack` files (see linkgit:git-pack-objects[1]) with a
|
||||||
|
header indicating what references are contained within the bundle.
|
||||||
|
|
||||||
|
Like the packed archive format itself bundles can either be
|
||||||
|
self-contained, or be created using exclusions.
|
||||||
|
See the "OBJECT PREREQUISITES" section below.
|
||||||
|
|
||||||
|
Bundles created using revision exclusions are "thin packs" created
|
||||||
|
using the `--thin` option to linkgit:git-pack-objects[1], and
|
||||||
|
unbundled using the `--fix-thin` option to linkgit:git-index-pack[1].
|
||||||
|
|
||||||
|
There is no option to create a "thick pack" when using revision
|
||||||
|
exclusions, and users should not be concerned about the difference. By
|
||||||
|
using "thin packs", bundles created using exclusions are smaller in
|
||||||
|
size. That they're "thin" under the hood is merely noted here as a
|
||||||
|
curiosity, and as a reference to other documentation.
|
||||||
|
|
||||||
|
See linkgit:gitformat-bundle[5] for more details and the discussion of
|
||||||
|
"thin pack" in linkgit:gitformat-pack[5] for further details.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
create [options] <file> <git-rev-list-args>::
|
||||||
|
Used to create a bundle named 'file'. This requires the
|
||||||
|
'<git-rev-list-args>' arguments to define the bundle contents.
|
||||||
|
'options' contains the options specific to the 'git bundle create'
|
||||||
|
subcommand. If 'file' is `-`, the bundle is written to stdout.
|
||||||
|
|
||||||
|
verify <file>::
|
||||||
|
Used to check that a bundle file is valid and will apply
|
||||||
|
cleanly to the current repository. This includes checks on the
|
||||||
|
bundle format itself as well as checking that the prerequisite
|
||||||
|
commits exist and are fully linked in the current repository.
|
||||||
|
Then, 'git bundle' prints a list of missing commits, if any.
|
||||||
|
Finally, information about additional capabilities, such as "object
|
||||||
|
filter", is printed. See "Capabilities" in linkgit:gitformat-bundle[5]
|
||||||
|
for more information. The exit code is zero for success, but will
|
||||||
|
be nonzero if the bundle file is invalid. If 'file' is `-`, the
|
||||||
|
bundle is read from stdin.
|
||||||
|
|
||||||
|
list-heads <file>::
|
||||||
|
Lists the references defined in the bundle. If followed by a
|
||||||
|
list of references, only references matching those given are
|
||||||
|
printed out. If 'file' is `-`, the bundle is read from stdin.
|
||||||
|
|
||||||
|
unbundle <file>::
|
||||||
|
Passes the objects in the bundle to 'git index-pack'
|
||||||
|
for storage in the repository, then prints the names of all
|
||||||
|
defined references. If a list of references is given, only
|
||||||
|
references matching those in the list are printed. This command is
|
||||||
|
really plumbing, intended to be called only by 'git fetch'.
|
||||||
|
If 'file' is `-`, the bundle is read from stdin.
|
||||||
|
|
||||||
|
<git-rev-list-args>::
|
||||||
|
A list of arguments, acceptable to 'git rev-parse' and
|
||||||
|
'git rev-list' (and containing a named ref, see SPECIFYING REFERENCES
|
||||||
|
below), that specifies the specific objects and references
|
||||||
|
to transport. For example, `master~10..master` causes the
|
||||||
|
current master reference to be packaged along with all objects
|
||||||
|
added since its 10th ancestor commit. There is no explicit
|
||||||
|
limit to the number of references and objects that may be
|
||||||
|
packaged.
|
||||||
|
|
||||||
|
|
||||||
|
[<refname>...]::
|
||||||
|
A list of references used to limit the references reported as
|
||||||
|
available. This is principally of use to 'git fetch', which
|
||||||
|
expects to receive only those references asked for and not
|
||||||
|
necessarily everything in the pack (in this case, 'git bundle' acts
|
||||||
|
like 'git fetch-pack').
|
||||||
|
|
||||||
|
--progress::
|
||||||
|
Progress status is reported on the standard error stream
|
||||||
|
by default when it is attached to a terminal, unless -q
|
||||||
|
is specified. This flag forces progress status even if
|
||||||
|
the standard error stream is not directed to a terminal.
|
||||||
|
|
||||||
|
--version=<version>::
|
||||||
|
Specify the bundle version. Version 2 is the older format and can only be
|
||||||
|
used with SHA-1 repositories; the newer version 3 contains capabilities that
|
||||||
|
permit extensions. The default is the oldest supported format, based on the
|
||||||
|
hash algorithm in use.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
This flag makes the command not to report its progress
|
||||||
|
on the standard error stream.
|
||||||
|
|
||||||
|
SPECIFYING REFERENCES
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Revisions must be accompanied by reference names to be packaged in a
|
||||||
|
bundle. Alternatively `--all` can be used to package all refs.
|
||||||
|
|
||||||
|
More than one reference may be packaged, and more than one set of prerequisite objects can
|
||||||
|
be specified. The objects packaged are those not contained in the
|
||||||
|
union of the prerequisites.
|
||||||
|
|
||||||
|
The 'git bundle create' command resolves the reference names for you
|
||||||
|
using the same rules as `git rev-parse --abbrev-ref=loose`. Each
|
||||||
|
prerequisite can be specified explicitly (e.g. `^master~10`), or implicitly
|
||||||
|
(e.g. `master~10..master`, `--since=10.days.ago master`).
|
||||||
|
|
||||||
|
All of these simple cases are OK (assuming we have a "master" and
|
||||||
|
"next" branch):
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create master.bundle master
|
||||||
|
$ echo master | git bundle create master.bundle --stdin
|
||||||
|
$ git bundle create master-and-next.bundle master next
|
||||||
|
$ (echo master; echo next) | git bundle create master-and-next.bundle --stdin
|
||||||
|
----------------
|
||||||
|
|
||||||
|
And so are these (and the same but omitted `--stdin` examples):
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create recent-master.bundle master~10..master
|
||||||
|
$ git bundle create recent-updates.bundle master~10..master next~5..next
|
||||||
|
----------------
|
||||||
|
|
||||||
|
A revision name or a range whose right-hand-side cannot be resolved to
|
||||||
|
a reference is not accepted:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create HEAD.bundle $(git rev-parse HEAD)
|
||||||
|
fatal: Refusing to create empty bundle.
|
||||||
|
$ git bundle create master-yesterday.bundle master~10..master~5
|
||||||
|
fatal: Refusing to create empty bundle.
|
||||||
|
----------------
|
||||||
|
|
||||||
|
OBJECT PREREQUISITES
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
When creating bundles it is possible to create a self-contained bundle
|
||||||
|
that can be unbundled in a repository with no common history, as well
|
||||||
|
as providing negative revisions to exclude objects needed in the
|
||||||
|
earlier parts of the history.
|
||||||
|
|
||||||
|
Feeding a revision such as `new` to `git bundle create` will create a
|
||||||
|
bundle file that contains all the objects reachable from the revision
|
||||||
|
`new`. That bundle can be unbundled in any repository to obtain a full
|
||||||
|
history that leads to the revision `new`:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create full.bundle new
|
||||||
|
----------------
|
||||||
|
|
||||||
|
A revision range such as `old..new` will produce a bundle file that
|
||||||
|
will require the revision `old` (and any objects reachable from it)
|
||||||
|
to exist for the bundle to be "unbundle"-able:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create full.bundle old..new
|
||||||
|
----------------
|
||||||
|
|
||||||
|
A self-contained bundle without any prerequisites can be extracted
|
||||||
|
into anywhere, even into an empty repository, or be cloned from
|
||||||
|
(i.e., `new`, but not `old..new`).
|
||||||
|
|
||||||
|
It is okay to err on the side of caution, causing the bundle file
|
||||||
|
to contain objects already in the destination, as these are ignored
|
||||||
|
when unpacking at the destination.
|
||||||
|
|
||||||
|
If you want to provide the same set of refs that a clone directly
|
||||||
|
from the source repository would get, use `--branches --tags` for
|
||||||
|
the `<git-rev-list-args>`.
|
||||||
|
|
||||||
|
The 'git bundle verify' command can be used to check whether your
|
||||||
|
recipient repository has the required prerequisite commits for a
|
||||||
|
bundle.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
We'll discuss two cases:
|
||||||
|
|
||||||
|
1. Taking a full backup of a repository
|
||||||
|
2. Transferring the history of a repository to another machine when the
|
||||||
|
two machines have no direct connection
|
||||||
|
|
||||||
|
First let's consider a full backup of the repository. The following
|
||||||
|
command will take a full backup of the repository in the sense that all
|
||||||
|
refs are included in the bundle:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create backup.bundle --all
|
||||||
|
----------------
|
||||||
|
|
||||||
|
But note again that this is only for the refs, i.e. you will only
|
||||||
|
include refs and commits reachable from those refs. You will not
|
||||||
|
include other local state, such as the contents of the index, working
|
||||||
|
tree, the stash, per-repository configuration, hooks, etc.
|
||||||
|
|
||||||
|
You can later recover that repository by using for example
|
||||||
|
linkgit:git-clone[1]:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git clone backup.bundle <new directory>
|
||||||
|
----------------
|
||||||
|
|
||||||
|
For the next example, assume you want to transfer the history from a
|
||||||
|
repository R1 on machine A to another repository R2 on machine B.
|
||||||
|
For whatever reason, direct connection between A and B is not allowed,
|
||||||
|
but we can move data from A to B via some mechanism (CD, email, etc.).
|
||||||
|
We want to update R2 with development made on the branch master in R1.
|
||||||
|
|
||||||
|
To bootstrap the process, you can first create a bundle that does not have
|
||||||
|
any prerequisites. You can use a tag to remember up to what commit you last
|
||||||
|
processed, in order to make it easy to later update the other repository
|
||||||
|
with an incremental bundle:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
machineA$ cd R1
|
||||||
|
machineA$ git bundle create file.bundle master
|
||||||
|
machineA$ git tag -f lastR2bundle master
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Then you transfer file.bundle to the target machine B. Because this
|
||||||
|
bundle does not require any existing object to be extracted, you can
|
||||||
|
create a new repository on machine B by cloning from it:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
machineB$ git clone -b master /home/me/tmp/file.bundle R2
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This will define a remote called "origin" in the resulting repository that
|
||||||
|
lets you fetch and pull from the bundle. The $GIT_DIR/config file in R2 will
|
||||||
|
have an entry like this:
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
[remote "origin"]
|
||||||
|
url = /home/me/tmp/file.bundle
|
||||||
|
fetch = refs/heads/*:refs/remotes/origin/*
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
To update the resulting mine.git repository, you can fetch or pull after
|
||||||
|
replacing the bundle stored at /home/me/tmp/file.bundle with incremental
|
||||||
|
updates.
|
||||||
|
|
||||||
|
After working some more in the original repository, you can create an
|
||||||
|
incremental bundle to update the other repository:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
machineA$ cd R1
|
||||||
|
machineA$ git bundle create file.bundle lastR2bundle..master
|
||||||
|
machineA$ git tag -f lastR2bundle master
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You then transfer the bundle to the other machine to replace
|
||||||
|
/home/me/tmp/file.bundle, and pull from it.
|
||||||
|
|
||||||
|
----------------
|
||||||
|
machineB$ cd R2
|
||||||
|
machineB$ git pull
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If you know up to what commit the intended recipient repository should
|
||||||
|
have the necessary objects, you can use that knowledge to specify the
|
||||||
|
prerequisites, giving a cut-off point to limit the revisions and objects that go
|
||||||
|
in the resulting bundle. The previous example used the lastR2bundle tag
|
||||||
|
for this purpose, but you can use any other options that you would give to
|
||||||
|
the linkgit:git-log[1] command. Here are more examples:
|
||||||
|
|
||||||
|
You can use a tag that is present in both:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create mybundle v1.0.0..master
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You can use a prerequisite based on time:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create mybundle --since=10.days master
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You can use the number of commits:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle create mybundle -10 master
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You can run `git-bundle verify` to see if you can extract from a bundle
|
||||||
|
that was created with a prerequisite:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git bundle verify mybundle
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This will list what commits you must have in order to extract from the
|
||||||
|
bundle and will error out if you do not have them.
|
||||||
|
|
||||||
|
A bundle from a recipient repository's point of view is just like a
|
||||||
|
regular repository which it fetches or pulls from. You can, for example, map
|
||||||
|
references when fetching:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git fetch mybundle master:localRef
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You can also see what references it offers:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ git ls-remote mybundle
|
||||||
|
----------------
|
||||||
|
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
A naive way to make a full backup of a repository is to use something to
|
||||||
|
the effect of `cp -r <repo> <destination>`. This is discouraged since
|
||||||
|
the repository could be written to during the copy operation. In turn
|
||||||
|
some files at `<destination>` could be corrupted.
|
||||||
|
|
||||||
|
This is why it is recommended to use Git tooling for making repository
|
||||||
|
backups, either with this command or with e.g. linkgit:git-clone[1].
|
||||||
|
But keep in mind that these tools will not help you backup state other
|
||||||
|
than refs and commits. In other words they will not help you backup
|
||||||
|
contents of the index, working tree, the stash, per-repository
|
||||||
|
configuration, hooks, etc.
|
||||||
|
|
||||||
|
See also linkgit:gitfaq[7], section "TRANSFERS" for a discussion of the
|
||||||
|
problems associated with file syncing across systems.
|
||||||
|
|
||||||
|
FILE FORMAT
|
||||||
|
-----------
|
||||||
|
|
||||||
|
See linkgit:gitformat-bundle[5].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
449
app/src/main/assets/manpages/git-cat-file.txt
Normal file
449
app/src/main/assets/manpages/git-cat-file.txt
Normal file
@@ -0,0 +1,449 @@
|
|||||||
|
git-cat-file(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-cat-file - Provide contents or details of repository objects
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git cat-file' <type> <object>
|
||||||
|
'git cat-file' (-e | -p | -t | -s) <object>
|
||||||
|
'git cat-file' (--textconv | --filters)
|
||||||
|
[<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]
|
||||||
|
'git cat-file' (--batch | --batch-check | --batch-command) [--batch-all-objects]
|
||||||
|
[--buffer] [--follow-symlinks] [--unordered]
|
||||||
|
[--textconv | --filters] [-Z]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Output the contents or other properties such as size, type or delta
|
||||||
|
information of one or more objects.
|
||||||
|
|
||||||
|
This command can operate in two modes, depending on whether an option
|
||||||
|
from the `--batch` family is specified.
|
||||||
|
|
||||||
|
In non-batch mode, the command provides information on an object
|
||||||
|
named on the command line.
|
||||||
|
|
||||||
|
In batch mode, arguments are read from standard input.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<object>::
|
||||||
|
The name of the object to show.
|
||||||
|
For a more complete list of ways to spell object names, see
|
||||||
|
the "SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
|
||||||
|
|
||||||
|
-t::
|
||||||
|
Instead of the content, show the object type identified by
|
||||||
|
`<object>`.
|
||||||
|
|
||||||
|
-s::
|
||||||
|
Instead of the content, show the object size identified by
|
||||||
|
`<object>`. If used with `--use-mailmap` option, will show
|
||||||
|
the size of updated object after replacing idents using the
|
||||||
|
mailmap mechanism.
|
||||||
|
|
||||||
|
-e::
|
||||||
|
Exit with zero status if `<object>` exists and is a valid
|
||||||
|
object. If `<object>` is of an invalid format, exit with non-zero
|
||||||
|
status and emit an error on stderr.
|
||||||
|
|
||||||
|
-p::
|
||||||
|
Pretty-print the contents of `<object>` based on its type.
|
||||||
|
|
||||||
|
<type>::
|
||||||
|
Typically this matches the real type of `<object>` but asking
|
||||||
|
for a type that can trivially be dereferenced from the given
|
||||||
|
`<object>` is also permitted. An example is to ask for a
|
||||||
|
"tree" with `<object>` being a commit object that contains it,
|
||||||
|
or to ask for a "blob" with `<object>` being a tag object that
|
||||||
|
points at it.
|
||||||
|
|
||||||
|
--mailmap::
|
||||||
|
--no-mailmap::
|
||||||
|
--use-mailmap::
|
||||||
|
--no-use-mailmap::
|
||||||
|
Use mailmap file to map author, committer and tagger names
|
||||||
|
and email addresses to canonical real names and email addresses.
|
||||||
|
See linkgit:git-shortlog[1].
|
||||||
|
|
||||||
|
--textconv::
|
||||||
|
Show the content as transformed by a textconv filter. In this case,
|
||||||
|
`<object>` has to be of the form `<tree-ish>:<path>`, or `:<path>` in
|
||||||
|
order to apply the filter to the content recorded in the index at
|
||||||
|
`<path>`.
|
||||||
|
|
||||||
|
--filters::
|
||||||
|
Show the content as converted by the filters configured in
|
||||||
|
the current working tree for the given `<path>` (i.e. smudge filters,
|
||||||
|
end-of-line conversion, etc). In this case, `<object>` has to be of
|
||||||
|
the form `<tree-ish>:<path>`, or `:<path>`.
|
||||||
|
|
||||||
|
--filter=<filter-spec>::
|
||||||
|
--no-filter::
|
||||||
|
Omit objects from the list of printed objects. This can only be used in
|
||||||
|
combination with one of the batched modes. Excluded objects that have
|
||||||
|
been explicitly requested via any of the batch modes that read objects
|
||||||
|
via standard input (`--batch`, `--batch-check`) will be reported as
|
||||||
|
"filtered". Excluded objects in `--batch-all-objects` mode will not be
|
||||||
|
printed at all. The '<filter-spec>' may be one of the following:
|
||||||
|
+
|
||||||
|
The form '--filter=blob:none' omits all blobs.
|
||||||
|
+
|
||||||
|
The form '--filter=blob:limit=<n>[kmg]' omits blobs of size at least n
|
||||||
|
bytes or units. n may be zero. The suffixes k, m, and g can be used to name
|
||||||
|
units in KiB, MiB, or GiB. For example, 'blob:limit=1k' is the same as
|
||||||
|
'blob:limit=1024'.
|
||||||
|
+
|
||||||
|
The form '--filter=object:type=(tag|commit|tree|blob)' omits all objects which
|
||||||
|
are not of the requested type.
|
||||||
|
|
||||||
|
--path=<path>::
|
||||||
|
For use with `--textconv` or `--filters`, to allow specifying an object
|
||||||
|
name and a path separately, e.g. when it is difficult to figure out
|
||||||
|
the revision from which the blob came.
|
||||||
|
|
||||||
|
--batch::
|
||||||
|
--batch=<format>::
|
||||||
|
Print object information and contents for each object provided
|
||||||
|
on stdin. May not be combined with any other options or arguments
|
||||||
|
except `--textconv`, `--filters`, or `--use-mailmap`.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* When used with `--textconv` or `--filters`, the input lines
|
||||||
|
must specify the path, separated by whitespace. See the section
|
||||||
|
`BATCH OUTPUT` below for details.
|
||||||
|
|
||||||
|
* When used with `--use-mailmap`, for commit and tag objects, the
|
||||||
|
contents part of the output shows the identities replaced using the
|
||||||
|
mailmap mechanism, while the information part of the output shows
|
||||||
|
the size of the object as if it actually recorded the replacement
|
||||||
|
identities.
|
||||||
|
--
|
||||||
|
|
||||||
|
--batch-check::
|
||||||
|
--batch-check=<format>::
|
||||||
|
Print object information for each object provided on stdin. May not be
|
||||||
|
combined with any other options or arguments except `--textconv`, `--filters`
|
||||||
|
or `--use-mailmap`.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* When used with `--textconv` or `--filters`, the input lines must
|
||||||
|
specify the path, separated by whitespace. See the section
|
||||||
|
`BATCH OUTPUT` below for details.
|
||||||
|
|
||||||
|
* When used with `--use-mailmap`, for commit and tag objects, the
|
||||||
|
printed object information shows the size of the object as if the
|
||||||
|
identities recorded in it were replaced by the mailmap mechanism.
|
||||||
|
--
|
||||||
|
|
||||||
|
--batch-command::
|
||||||
|
--batch-command=<format>::
|
||||||
|
Enter a command mode that reads commands and arguments from stdin. May
|
||||||
|
only be combined with `--buffer`, `--textconv`, `--use-mailmap` or
|
||||||
|
`--filters`.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* When used with `--textconv` or `--filters`, the input lines must
|
||||||
|
specify the path, separated by whitespace. See the section
|
||||||
|
`BATCH OUTPUT` below for details.
|
||||||
|
|
||||||
|
* When used with `--use-mailmap`, for commit and tag objects, the
|
||||||
|
`contents` command shows the identities replaced using the
|
||||||
|
mailmap mechanism, while the `info` command shows the size
|
||||||
|
of the object as if it actually recorded the replacement
|
||||||
|
identities.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
`--batch-command` recognizes the following commands:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
contents <object>::
|
||||||
|
Print object contents for object reference `<object>`. This corresponds to
|
||||||
|
the output of `--batch`.
|
||||||
|
|
||||||
|
info <object>::
|
||||||
|
Print object info for object reference `<object>`. This corresponds to the
|
||||||
|
output of `--batch-check`.
|
||||||
|
|
||||||
|
flush::
|
||||||
|
Used with `--buffer` to execute all preceding commands that were issued
|
||||||
|
since the beginning or since the last flush was issued. When `--buffer`
|
||||||
|
is used, no output will come until a `flush` is issued. When `--buffer`
|
||||||
|
is not used, commands are flushed each time without issuing `flush`.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
|
||||||
|
--batch-all-objects::
|
||||||
|
Instead of reading a list of objects on stdin, perform the
|
||||||
|
requested batch operation on all objects in the repository and
|
||||||
|
any alternate object stores (not just reachable objects).
|
||||||
|
Requires `--batch` or `--batch-check` be specified. By default,
|
||||||
|
the objects are visited in order sorted by their hashes; see
|
||||||
|
also `--unordered` below. Objects are presented as-is, without
|
||||||
|
respecting the "replace" mechanism of linkgit:git-replace[1].
|
||||||
|
|
||||||
|
--buffer::
|
||||||
|
Normally batch output is flushed after each object is output, so
|
||||||
|
that a process can interactively read and write from
|
||||||
|
`cat-file`. With this option, the output uses normal stdio
|
||||||
|
buffering; this is much more efficient when invoking
|
||||||
|
`--batch-check` or `--batch-command` on a large number of objects.
|
||||||
|
|
||||||
|
--unordered::
|
||||||
|
When `--batch-all-objects` is in use, visit objects in an
|
||||||
|
order which may be more efficient for accessing the object
|
||||||
|
contents than hash order. The exact details of the order are
|
||||||
|
unspecified, but if you do not require a specific order, this
|
||||||
|
should generally result in faster output, especially with
|
||||||
|
`--batch`. Note that `cat-file` will still show each object
|
||||||
|
only once, even if it is stored multiple times in the
|
||||||
|
repository.
|
||||||
|
|
||||||
|
--follow-symlinks::
|
||||||
|
With `--batch` or `--batch-check`, follow symlinks inside the
|
||||||
|
repository when requesting objects with extended SHA-1
|
||||||
|
expressions of the form tree-ish:path-in-tree. Instead of
|
||||||
|
providing output about the link itself, provide output about
|
||||||
|
the linked-to object. If a symlink points outside the
|
||||||
|
tree-ish (e.g. a link to `/foo` or a root-level link to `../foo`),
|
||||||
|
the portion of the link which is outside the tree will be
|
||||||
|
printed.
|
||||||
|
+
|
||||||
|
This option does not (currently) work correctly when an object in the
|
||||||
|
index is specified (e.g. `:link` instead of `HEAD:link`) rather than
|
||||||
|
one in the tree.
|
||||||
|
+
|
||||||
|
This option cannot (currently) be used unless `--batch` or
|
||||||
|
`--batch-check` is used.
|
||||||
|
+
|
||||||
|
For example, consider a git repository containing:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
f: a file containing "hello\n"
|
||||||
|
link: a symlink to f
|
||||||
|
dir/link: a symlink to ../f
|
||||||
|
plink: a symlink to ../f
|
||||||
|
alink: a symlink to /etc/passwd
|
||||||
|
--
|
||||||
|
+
|
||||||
|
For a regular file `f`, `echo HEAD:f | git cat-file --batch` would print
|
||||||
|
+
|
||||||
|
--
|
||||||
|
ce013625030ba8dba906f756967f9e9ca394464a blob 6
|
||||||
|
--
|
||||||
|
+
|
||||||
|
And `echo HEAD:link | git cat-file --batch --follow-symlinks` would
|
||||||
|
print the same thing, as would `HEAD:dir/link`, as they both point at
|
||||||
|
`HEAD:f`.
|
||||||
|
+
|
||||||
|
Without `--follow-symlinks`, these would print data about the symlink
|
||||||
|
itself. In the case of `HEAD:link`, you would see
|
||||||
|
+
|
||||||
|
--
|
||||||
|
4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1
|
||||||
|
--
|
||||||
|
+
|
||||||
|
Both `plink` and `alink` point outside the tree, so they would
|
||||||
|
respectively print:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
symlink 4
|
||||||
|
../f
|
||||||
|
|
||||||
|
symlink 11
|
||||||
|
/etc/passwd
|
||||||
|
--
|
||||||
|
|
||||||
|
-Z::
|
||||||
|
Only meaningful with `--batch`, `--batch-check`, or
|
||||||
|
`--batch-command`; input and output is NUL-delimited instead of
|
||||||
|
newline-delimited.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
Only meaningful with `--batch`, `--batch-check`, or
|
||||||
|
`--batch-command`; input is NUL-delimited instead of
|
||||||
|
newline-delimited. This option is deprecated in favor of
|
||||||
|
`-Z` as the output can otherwise be ambiguous.
|
||||||
|
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
If `-t` is specified, one of the `<type>`.
|
||||||
|
|
||||||
|
If `-s` is specified, the size of the `<object>` in bytes.
|
||||||
|
|
||||||
|
If `-e` is specified, no output, unless the `<object>` is malformed.
|
||||||
|
|
||||||
|
If `-p` is specified, the contents of `<object>` are pretty-printed.
|
||||||
|
|
||||||
|
If `<type>` is specified, the raw (though uncompressed) contents of the `<object>`
|
||||||
|
will be returned.
|
||||||
|
|
||||||
|
BATCH OUTPUT
|
||||||
|
------------
|
||||||
|
|
||||||
|
If `--batch` or `--batch-check` is given, `cat-file` will read objects
|
||||||
|
from stdin, one per line, and print information about them in the same
|
||||||
|
order as they have been read. By default, the whole line is
|
||||||
|
considered as an object, as if it were fed to linkgit:git-rev-parse[1].
|
||||||
|
|
||||||
|
When `--batch-command` is given, `cat-file` will read commands from stdin,
|
||||||
|
one per line, and print information based on the command given. With
|
||||||
|
`--batch-command`, the `info` command followed by an object will print
|
||||||
|
information about the object the same way `--batch-check` would, and the
|
||||||
|
`contents` command followed by an object prints contents in the same way
|
||||||
|
`--batch` would.
|
||||||
|
|
||||||
|
You can specify the information shown for each object by using a custom
|
||||||
|
`<format>`. The `<format>` is copied literally to stdout for each
|
||||||
|
object, with placeholders of the form `%(atom)` expanded, followed by a
|
||||||
|
newline. The available atoms are:
|
||||||
|
|
||||||
|
`objectname`::
|
||||||
|
The full hex representation of the object name.
|
||||||
|
|
||||||
|
`objecttype`::
|
||||||
|
The type of the object (the same as `cat-file -t` reports).
|
||||||
|
|
||||||
|
`objectmode`::
|
||||||
|
If the specified object has mode information (such as a tree or
|
||||||
|
index entry), the mode expressed as an octal integer. Otherwise,
|
||||||
|
empty string.
|
||||||
|
|
||||||
|
`objectsize`::
|
||||||
|
The size, in bytes, of the object (the same as `cat-file -s`
|
||||||
|
reports).
|
||||||
|
|
||||||
|
`objectsize:disk`::
|
||||||
|
The size, in bytes, that the object takes up on disk. See the
|
||||||
|
note about on-disk sizes in the `CAVEATS` section below.
|
||||||
|
|
||||||
|
`deltabase`::
|
||||||
|
If the object is stored as a delta on-disk, this expands to the
|
||||||
|
full hex representation of the delta base object name.
|
||||||
|
Otherwise, expands to the null OID (all zeroes). See `CAVEATS`
|
||||||
|
below.
|
||||||
|
|
||||||
|
`rest`::
|
||||||
|
If this atom is used in the output string, input lines are split
|
||||||
|
at the first whitespace boundary. All characters before that
|
||||||
|
whitespace are considered to be the object name; characters
|
||||||
|
after that first run of whitespace (i.e., the "rest" of the
|
||||||
|
line) are output in place of the `%(rest)` atom.
|
||||||
|
|
||||||
|
If no format is specified, the default format is `%(objectname)
|
||||||
|
%(objecttype) %(objectsize)`.
|
||||||
|
|
||||||
|
If `--batch` is specified, or if `--batch-command` is used with the `contents`
|
||||||
|
command, the object information is followed by the object contents (consisting
|
||||||
|
of `%(objectsize)` bytes), followed by a newline.
|
||||||
|
|
||||||
|
For example, `--batch` without a custom format would produce:
|
||||||
|
|
||||||
|
-----------
|
||||||
|
<oid> SP <type> SP <size> LF
|
||||||
|
<contents> LF
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Whereas `--batch-check='%(objectname) %(objecttype)'` would produce:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<oid> SP <type> LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
If a name is specified on stdin that cannot be resolved to an object in
|
||||||
|
the repository, then `cat-file` will ignore any custom format and print:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<object> SP missing LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
If a name is specified on stdin that is filtered out via `--filter=`,
|
||||||
|
then `cat-file` will ignore any custom format and print:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<object> SP excluded LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
If a name is specified that might refer to more than one object (an ambiguous short sha), then `cat-file` will ignore any custom format and print:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<object> SP ambiguous LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
If a name is specified that refers to a submodule entry in a tree and the
|
||||||
|
target object does not exist in the repository, then `cat-file` will ignore
|
||||||
|
any custom format and print (with the object ID of the submodule):
|
||||||
|
|
||||||
|
------------
|
||||||
|
<oid> SP submodule LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
If `--follow-symlinks` is used, and a symlink in the repository points
|
||||||
|
outside the repository, then `cat-file` will ignore any custom format
|
||||||
|
and print:
|
||||||
|
|
||||||
|
------------
|
||||||
|
symlink SP <size> LF
|
||||||
|
<symlink> LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
The symlink will either be absolute (beginning with a `/`), or relative
|
||||||
|
to the tree root. For instance, if dir/link points to `../../foo`, then
|
||||||
|
`<symlink>` will be `../foo`. `<size>` is the size of the symlink in bytes.
|
||||||
|
|
||||||
|
If `--follow-symlinks` is used, the following error messages will be
|
||||||
|
displayed:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<object> SP missing LF
|
||||||
|
------------
|
||||||
|
is printed when the initial symlink requested does not exist.
|
||||||
|
|
||||||
|
------------
|
||||||
|
dangling SP <size> LF
|
||||||
|
<object> LF
|
||||||
|
------------
|
||||||
|
is printed when the initial symlink exists, but something that
|
||||||
|
it (transitive-of) points to does not.
|
||||||
|
|
||||||
|
------------
|
||||||
|
loop SP <size> LF
|
||||||
|
<object> LF
|
||||||
|
------------
|
||||||
|
is printed for symlink loops (or any symlinks that
|
||||||
|
require more than 40 link resolutions to resolve).
|
||||||
|
|
||||||
|
------------
|
||||||
|
notdir SP <size> LF
|
||||||
|
<object> LF
|
||||||
|
------------
|
||||||
|
is printed when, during symlink resolution, a file is used as a
|
||||||
|
directory name.
|
||||||
|
|
||||||
|
Alternatively, when `-Z` is passed, the line feeds in any of the above examples
|
||||||
|
are replaced with NUL terminators. This ensures that output will be parsable if
|
||||||
|
the output itself would contain a linefeed and is thus recommended for
|
||||||
|
scripting purposes.
|
||||||
|
|
||||||
|
CAVEATS
|
||||||
|
-------
|
||||||
|
|
||||||
|
Note that the sizes of objects on disk are reported accurately, but care
|
||||||
|
should be taken in drawing conclusions about which refs or objects are
|
||||||
|
responsible for disk usage. The size of a packed non-delta object may be
|
||||||
|
much larger than the size of objects which delta against it, but the
|
||||||
|
choice of which object is the base and which is the delta is arbitrary
|
||||||
|
and is subject to change during a repack.
|
||||||
|
|
||||||
|
Note also that multiple copies of an object may be present in the object
|
||||||
|
database; in this case, it is undefined which copy's size or delta base
|
||||||
|
will be reported.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
132
app/src/main/assets/manpages/git-check-attr.txt
Normal file
132
app/src/main/assets/manpages/git-check-attr.txt
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
git-check-attr(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-check-attr - Display gitattributes information
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git check-attr' [--source <tree-ish>] [-a | --all | <attr>...] [--] <pathname>...
|
||||||
|
'git check-attr' --stdin [-z] [--source <tree-ish>] [-a | --all | <attr>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
For every pathname, this command will list if each attribute is 'unspecified',
|
||||||
|
'set', or 'unset' as a gitattribute on that pathname.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-a::
|
||||||
|
--all::
|
||||||
|
List all attributes that are associated with the specified
|
||||||
|
paths. If this option is used, then 'unspecified' attributes
|
||||||
|
will not be included in the output.
|
||||||
|
|
||||||
|
--cached::
|
||||||
|
Consider `.gitattributes` in the index only, ignoring the working tree.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Read pathnames from the standard input, one per line,
|
||||||
|
instead of from the command line.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
The output format is modified to be machine-parsable.
|
||||||
|
If `--stdin` is also given, input paths are separated
|
||||||
|
with a NUL character instead of a linefeed character.
|
||||||
|
|
||||||
|
--source=<tree-ish>::
|
||||||
|
Check attributes against the specified tree-ish. It is common to
|
||||||
|
specify the source tree by naming a commit, branch, or tag associated
|
||||||
|
with it.
|
||||||
|
|
||||||
|
\--::
|
||||||
|
Interpret all preceding arguments as attributes and all following
|
||||||
|
arguments as path names.
|
||||||
|
|
||||||
|
If none of `--stdin`, `--all`, or `--` is used, the first argument
|
||||||
|
will be treated as an attribute and the rest of the arguments as
|
||||||
|
pathnames.
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
The output is of the form:
|
||||||
|
<path> COLON SP <attribute> COLON SP <info> LF
|
||||||
|
|
||||||
|
unless `-z` is in effect, in which case NUL is used as delimiter:
|
||||||
|
<path> NUL <attribute> NUL <info> NUL
|
||||||
|
|
||||||
|
|
||||||
|
<path> is the path of a file being queried, <attribute> is an attribute
|
||||||
|
being queried, and <info> can be either:
|
||||||
|
|
||||||
|
'unspecified';; when the attribute is not defined for the path.
|
||||||
|
'unset';; when the attribute is defined as false.
|
||||||
|
'set';; when the attribute is defined as true.
|
||||||
|
<value>;; when a value has been assigned to the attribute.
|
||||||
|
|
||||||
|
Buffering happens as documented under the `GIT_FLUSH` option in
|
||||||
|
linkgit:git[1]. The caller is responsible for avoiding deadlocks
|
||||||
|
caused by overfilling an input buffer or reading from an empty output
|
||||||
|
buffer.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
In the examples, the following '.gitattributes' file is used:
|
||||||
|
|
||||||
|
---------------
|
||||||
|
*.java diff=java -crlf myAttr
|
||||||
|
NoMyAttr.java !myAttr
|
||||||
|
README caveat=unspecified
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Listing a single attribute:
|
||||||
|
+
|
||||||
|
---------------
|
||||||
|
$ git check-attr diff org/example/MyClass.java
|
||||||
|
org/example/MyClass.java: diff: java
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Listing multiple attributes for a file:
|
||||||
|
+
|
||||||
|
---------------
|
||||||
|
$ git check-attr crlf diff myAttr -- org/example/MyClass.java
|
||||||
|
org/example/MyClass.java: crlf: unset
|
||||||
|
org/example/MyClass.java: diff: java
|
||||||
|
org/example/MyClass.java: myAttr: set
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Listing all attributes for a file:
|
||||||
|
+
|
||||||
|
---------------
|
||||||
|
$ git check-attr --all -- org/example/MyClass.java
|
||||||
|
org/example/MyClass.java: diff: java
|
||||||
|
org/example/MyClass.java: myAttr: set
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Listing an attribute for multiple files:
|
||||||
|
+
|
||||||
|
---------------
|
||||||
|
$ git check-attr myAttr -- org/example/MyClass.java org/example/NoMyAttr.java
|
||||||
|
org/example/MyClass.java: myAttr: set
|
||||||
|
org/example/NoMyAttr.java: myAttr: unspecified
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Not all values are equally unambiguous:
|
||||||
|
+
|
||||||
|
---------------
|
||||||
|
$ git check-attr caveat README
|
||||||
|
README: caveat: unspecified
|
||||||
|
---------------
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:gitattributes[5].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
129
app/src/main/assets/manpages/git-check-ignore.txt
Normal file
129
app/src/main/assets/manpages/git-check-ignore.txt
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
git-check-ignore(1)
|
||||||
|
===================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-check-ignore - Debug gitignore / exclude files
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git check-ignore' [<options>] <pathname>...
|
||||||
|
'git check-ignore' [<options>] --stdin
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
For each pathname given via the command-line or from a file via
|
||||||
|
`--stdin`, check whether the file is excluded by .gitignore (or other
|
||||||
|
input files to the exclude mechanism) and output the path if it is
|
||||||
|
excluded.
|
||||||
|
|
||||||
|
By default, tracked files are not shown at all since they are not
|
||||||
|
subject to exclude rules; but see `--no-index'.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Don't output anything, just set exit status. This is only
|
||||||
|
valid with a single pathname.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
--verbose::
|
||||||
|
Instead of printing the paths that are excluded, for each path
|
||||||
|
that matches an exclude pattern, print the exclude pattern
|
||||||
|
together with the path. (Matching an exclude pattern usually
|
||||||
|
means the path is excluded, but if the pattern begins with "`!`"
|
||||||
|
then it is a negated pattern and matching it means the path is
|
||||||
|
NOT excluded.)
|
||||||
|
+
|
||||||
|
For precedence rules within and between exclude sources, see
|
||||||
|
linkgit:gitignore[5].
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Read pathnames from the standard input, one per line,
|
||||||
|
instead of from the command-line.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
The output format is modified to be machine-parsable (see
|
||||||
|
below). If `--stdin` is also given, input paths are separated
|
||||||
|
with a NUL character instead of a linefeed character.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
--non-matching::
|
||||||
|
Show given paths which don't match any pattern. This only
|
||||||
|
makes sense when `--verbose` is enabled, otherwise it would
|
||||||
|
not be possible to distinguish between paths which match a
|
||||||
|
pattern and those which don't.
|
||||||
|
|
||||||
|
--no-index::
|
||||||
|
Don't look in the index when undertaking the checks. This can
|
||||||
|
be used to debug why a path became tracked by e.g. `git add .`
|
||||||
|
and was not ignored by the rules as expected by the user or when
|
||||||
|
developing patterns including negation to match a path previously
|
||||||
|
added with `git add -f`.
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
By default, any of the given pathnames which match an ignore pattern
|
||||||
|
will be output, one per line. If no pattern matches a given path,
|
||||||
|
nothing will be output for that path; this means that path will not be
|
||||||
|
ignored.
|
||||||
|
|
||||||
|
If `--verbose` is specified, the output is a series of lines of the form:
|
||||||
|
|
||||||
|
<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>
|
||||||
|
|
||||||
|
<pathname> is the path of a file being queried, <pattern> is the
|
||||||
|
matching pattern, <source> is the pattern's source file, and <linenum>
|
||||||
|
is the line number of the pattern within that source. If the pattern
|
||||||
|
contained a "`!`" prefix or "`/`" suffix, it will be preserved in the
|
||||||
|
output. <source> will be an absolute path when referring to the file
|
||||||
|
configured by `core.excludesFile`, or relative to the repository root
|
||||||
|
when referring to `.git/info/exclude` or a per-directory exclude file.
|
||||||
|
|
||||||
|
If `-z` is specified, the pathnames in the output are delimited by the
|
||||||
|
null character; if `--verbose` is also specified then null characters
|
||||||
|
are also used instead of colons and hard tabs:
|
||||||
|
|
||||||
|
<source> <NULL> <linenum> <NULL> <pattern> <NULL> <pathname> <NULL>
|
||||||
|
|
||||||
|
If `-n` or `--non-matching` are specified, non-matching pathnames will
|
||||||
|
also be output, in which case all fields in each output record except
|
||||||
|
for <pathname> will be empty. This can be useful when running
|
||||||
|
non-interactively, so that files can be incrementally streamed to
|
||||||
|
STDIN of a long-running check-ignore process, and for each of these
|
||||||
|
files, STDOUT will indicate whether that file matched a pattern or
|
||||||
|
not. (Without this option, it would be impossible to tell whether the
|
||||||
|
absence of output for a given file meant that it didn't match any
|
||||||
|
pattern, or that the output hadn't been generated yet.)
|
||||||
|
|
||||||
|
Buffering happens as documented under the `GIT_FLUSH` option in
|
||||||
|
linkgit:git[1]. The caller is responsible for avoiding deadlocks
|
||||||
|
caused by overfilling an input buffer or reading from an empty output
|
||||||
|
buffer.
|
||||||
|
|
||||||
|
EXIT STATUS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
0::
|
||||||
|
One or more of the provided paths is ignored.
|
||||||
|
|
||||||
|
1::
|
||||||
|
None of the provided paths are ignored.
|
||||||
|
|
||||||
|
128::
|
||||||
|
A fatal error was encountered.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:gitignore[5]
|
||||||
|
linkgit:git-config[1]
|
||||||
|
linkgit:git-ls-files[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
64
app/src/main/assets/manpages/git-check-mailmap.txt
Normal file
64
app/src/main/assets/manpages/git-check-mailmap.txt
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
git-check-mailmap(1)
|
||||||
|
====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-check-mailmap - Show canonical names and email addresses of contacts
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git check-mailmap' [<options>] <contact>...
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
For each ``Name $$<user@host>$$'', ``$$<user@host>$$'', or ``$$user@host$$''
|
||||||
|
from the command-line or standard input (when using `--stdin`), look up the
|
||||||
|
person's canonical name and email address (see "Mapping Authors" below). If
|
||||||
|
found, print them; otherwise print the input as-is.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--stdin::
|
||||||
|
Read contacts, one per line, from the standard input after exhausting
|
||||||
|
contacts provided on the command-line.
|
||||||
|
|
||||||
|
--mailmap-file=<file>::
|
||||||
|
In addition to any configured mailmap files, read the specified
|
||||||
|
mailmap file. Entries in this file take precedence over entries in
|
||||||
|
either the default mailmap file or any configured mailmap file.
|
||||||
|
|
||||||
|
--mailmap-blob=<blob>::
|
||||||
|
Like `--mailmap-file`, but consider the value as a reference to a
|
||||||
|
blob in the repository. If both `--mailmap-file` and
|
||||||
|
`--mailmap-blob` are specified, entries in `--mailmap-file` will
|
||||||
|
take precedence.
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
For each contact, a single line is output, terminated by a newline. If the
|
||||||
|
name is provided or known to the 'mailmap', ``Name $$<user@host>$$'' is
|
||||||
|
printed; otherwise only ``$$<user@host>$$'' is printed.
|
||||||
|
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
See `mailmap.file` and `mailmap.blob` in linkgit:git-config[1] for how
|
||||||
|
to specify a custom `.mailmap` target file or object.
|
||||||
|
|
||||||
|
|
||||||
|
MAPPING AUTHORS
|
||||||
|
---------------
|
||||||
|
|
||||||
|
See linkgit:gitmailmap[5].
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
141
app/src/main/assets/manpages/git-check-ref-format.txt
Normal file
141
app/src/main/assets/manpages/git-check-ref-format.txt
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
git-check-ref-format(1)
|
||||||
|
=======================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-check-ref-format - Ensures that a reference name is well formed
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git check-ref-format' [--normalize]
|
||||||
|
[--[no-]allow-onelevel] [--refspec-pattern]
|
||||||
|
<refname>
|
||||||
|
'git check-ref-format' --branch <branchname-shorthand>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Checks if a given 'refname' is acceptable, and exits with a non-zero
|
||||||
|
status if it is not.
|
||||||
|
|
||||||
|
A reference is used in Git to specify branches and tags. A
|
||||||
|
branch head is stored in the `refs/heads` hierarchy, while
|
||||||
|
a tag is stored in the `refs/tags` hierarchy of the ref namespace
|
||||||
|
(typically in `$GIT_DIR/refs/heads` and `$GIT_DIR/refs/tags`
|
||||||
|
directories or, as entries in file `$GIT_DIR/packed-refs`
|
||||||
|
if refs are packed by `git gc`).
|
||||||
|
|
||||||
|
Git imposes the following rules on how references are named:
|
||||||
|
|
||||||
|
. They can include slash `/` for hierarchical (directory)
|
||||||
|
grouping, but no slash-separated component can begin with a
|
||||||
|
dot `.` or end with the sequence `.lock`.
|
||||||
|
|
||||||
|
. They must contain at least one `/`. This enforces the presence of a
|
||||||
|
category like `heads/`, `tags/` etc. but the actual names are not
|
||||||
|
restricted. If the `--allow-onelevel` option is used, this rule
|
||||||
|
is waived.
|
||||||
|
|
||||||
|
. They cannot have two consecutive dots `..` anywhere.
|
||||||
|
|
||||||
|
. They cannot have ASCII control characters (i.e. bytes whose
|
||||||
|
values are lower than \040, or \177 `DEL`), space, tilde `~`,
|
||||||
|
caret `^`, or colon `:` anywhere.
|
||||||
|
|
||||||
|
. They cannot have question-mark `?`, asterisk `*`, or open
|
||||||
|
bracket `[` anywhere. See the `--refspec-pattern` option below for
|
||||||
|
an exception to this rule.
|
||||||
|
|
||||||
|
. They cannot begin or end with a slash `/` or contain multiple
|
||||||
|
consecutive slashes (see the `--normalize` option below for an
|
||||||
|
exception to this rule).
|
||||||
|
|
||||||
|
. They cannot end with a dot `.`.
|
||||||
|
|
||||||
|
. They cannot contain a sequence `@{`.
|
||||||
|
|
||||||
|
. They cannot be the single character `@`.
|
||||||
|
|
||||||
|
. They cannot contain a `\`.
|
||||||
|
|
||||||
|
These rules make it easy for shell script based tools to parse
|
||||||
|
reference names, pathname expansion by the shell when a reference name is used
|
||||||
|
unquoted (by mistake), and also avoid ambiguities in certain
|
||||||
|
reference name expressions (see linkgit:gitrevisions[7]):
|
||||||
|
|
||||||
|
. A double-dot `..` is often used as in `ref1..ref2`, and in some
|
||||||
|
contexts this notation means `^ref1 ref2` (i.e. not in
|
||||||
|
`ref1` and in `ref2`).
|
||||||
|
|
||||||
|
. A tilde `~` and caret `^` are used to introduce the postfix
|
||||||
|
'nth parent' and 'peel onion' operation.
|
||||||
|
|
||||||
|
. A colon `:` is used as in `srcref:dstref` to mean "use srcref\'s
|
||||||
|
value and store it in dstref" in fetch and push operations.
|
||||||
|
It may also be used to select a specific object such as with
|
||||||
|
'git cat-file': "git cat-file blob v1.3.3:refs.c".
|
||||||
|
|
||||||
|
. at-open-brace `@{` is used as a notation to access a reflog entry.
|
||||||
|
|
||||||
|
With the `--branch` option, the command takes a name and checks if
|
||||||
|
it can be used as a valid branch name (e.g. when creating a new
|
||||||
|
branch). But be cautious when using the
|
||||||
|
previous checkout syntax that may refer to a detached HEAD state.
|
||||||
|
The rule `git check-ref-format --branch $name` implements
|
||||||
|
may be stricter than what `git check-ref-format refs/heads/$name`
|
||||||
|
says (e.g. a dash may appear at the beginning of a ref component,
|
||||||
|
but it is explicitly forbidden at the beginning of a branch name).
|
||||||
|
When run with the `--branch` option in a repository, the input is first
|
||||||
|
expanded for the ``previous checkout syntax''
|
||||||
|
`@{-n}`. For example, `@{-1}` is a way to refer the last thing that
|
||||||
|
was checked out using "git switch" or "git checkout" operation.
|
||||||
|
This option should be
|
||||||
|
used by porcelains to accept this syntax anywhere a branch name is
|
||||||
|
expected, so they can act as if you typed the branch name. As an
|
||||||
|
exception note that, the ``previous checkout operation'' might result
|
||||||
|
in a commit object name when the N-th last thing checked out was not
|
||||||
|
a branch.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--allow-onelevel::
|
||||||
|
--no-allow-onelevel::
|
||||||
|
Controls whether one-level refnames are accepted (i.e.,
|
||||||
|
refnames that do not contain multiple `/`-separated
|
||||||
|
components). The default is `--no-allow-onelevel`.
|
||||||
|
|
||||||
|
--refspec-pattern::
|
||||||
|
Interpret <refname> as a reference name pattern for a refspec
|
||||||
|
(as used with remote repositories). If this option is
|
||||||
|
enabled, <refname> is allowed to contain a single `*`
|
||||||
|
in the refspec (e.g., `foo/bar*/baz` or `foo/bar*baz/`
|
||||||
|
but not `foo/bar*/baz*`).
|
||||||
|
|
||||||
|
--normalize::
|
||||||
|
Normalize 'refname' by removing any leading slash (`/`)
|
||||||
|
characters and collapsing runs of adjacent slashes between
|
||||||
|
name components into a single slash. If the normalized
|
||||||
|
refname is valid then print it to standard output and exit
|
||||||
|
with a status of 0, otherwise exit with a non-zero status.
|
||||||
|
(`--print` is a deprecated way to spell `--normalize`.)
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Print the name of the previous thing checked out:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git check-ref-format --branch @{-1}
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Determine the reference name to use for a new branch:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")||
|
||||||
|
{ echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; }
|
||||||
|
------------
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
183
app/src/main/assets/manpages/git-checkout-index.txt
Normal file
183
app/src/main/assets/manpages/git-checkout-index.txt
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
git-checkout-index(1)
|
||||||
|
=====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-checkout-index - Copy files from the index to the working tree
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
|
||||||
|
[--stage=<number>|all]
|
||||||
|
[--temp]
|
||||||
|
[--ignore-skip-worktree-bits]
|
||||||
|
[-z] [--stdin]
|
||||||
|
[--] [<file>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Copies all listed files from the index to the working directory
|
||||||
|
(not overwriting existing files).
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-u::
|
||||||
|
--index::
|
||||||
|
update stat information for the checked out entries in
|
||||||
|
the index file.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
be quiet if files exist or are not in the index
|
||||||
|
|
||||||
|
-f::
|
||||||
|
--force::
|
||||||
|
forces overwrite of existing files
|
||||||
|
|
||||||
|
-a::
|
||||||
|
--all::
|
||||||
|
checks out all files in the index except for those with the
|
||||||
|
skip-worktree bit set (see `--ignore-skip-worktree-bits`).
|
||||||
|
Cannot be used together with explicit filenames.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
--no-create::
|
||||||
|
Don't checkout new files, only refresh files already checked
|
||||||
|
out.
|
||||||
|
|
||||||
|
--prefix=<string>::
|
||||||
|
When creating files, prepend <string> (usually a directory
|
||||||
|
including a trailing /)
|
||||||
|
|
||||||
|
--stage=<number>|all::
|
||||||
|
Instead of checking out unmerged entries, copy out the
|
||||||
|
files from the named stage. <number> must be between 1 and 3.
|
||||||
|
Note: --stage=all automatically implies --temp.
|
||||||
|
|
||||||
|
--temp::
|
||||||
|
Instead of copying the files to the working directory,
|
||||||
|
write the content to temporary files. The temporary name
|
||||||
|
associations will be written to stdout.
|
||||||
|
|
||||||
|
--ignore-skip-worktree-bits::
|
||||||
|
Check out all files, including those with the skip-worktree bit
|
||||||
|
set.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Instead of taking a list of paths from the command line,
|
||||||
|
read the list of paths from the standard input. Paths are
|
||||||
|
separated by LF (i.e. one path per line) by default.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
Only meaningful with `--stdin`; paths are separated with
|
||||||
|
NUL character instead of LF.
|
||||||
|
|
||||||
|
\--::
|
||||||
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
|
The order of the flags used to matter, but not anymore.
|
||||||
|
|
||||||
|
Just doing `git checkout-index` does nothing. You probably meant
|
||||||
|
`git checkout-index -a`. And if you want to force it, you want
|
||||||
|
`git checkout-index -f -a`.
|
||||||
|
|
||||||
|
Intuitiveness is not the goal here. Repeatability is. The reason for
|
||||||
|
the "no arguments means no work" behavior is that from scripts you are
|
||||||
|
supposed to be able to do:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ find . -name '*.h' -print0 | xargs -0 git checkout-index -f --
|
||||||
|
----------------
|
||||||
|
|
||||||
|
which will force all existing `*.h` files to be replaced with their
|
||||||
|
cached copies. If an empty command line implied "all", then this would
|
||||||
|
force-refresh everything in the index, which was not the point. But
|
||||||
|
since 'git checkout-index' accepts --stdin it would be faster to use:
|
||||||
|
|
||||||
|
----------------
|
||||||
|
$ find . -name '*.h' -print0 | git checkout-index -f -z --stdin
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The `--` is just a good idea when you know the rest will be filenames;
|
||||||
|
it will prevent problems with a filename of, for example, `-a`.
|
||||||
|
Using `--` is probably a good policy in scripts.
|
||||||
|
|
||||||
|
|
||||||
|
Using --temp or --stage=all
|
||||||
|
---------------------------
|
||||||
|
When `--temp` is used (or implied by `--stage=all`)
|
||||||
|
'git checkout-index' will create a temporary file for each index
|
||||||
|
entry being checked out. The index will not be updated with stat
|
||||||
|
information. These options can be useful if the caller needs all
|
||||||
|
stages of all unmerged entries so that the unmerged files can be
|
||||||
|
processed by an external merge tool.
|
||||||
|
|
||||||
|
A listing will be written to stdout providing the association of
|
||||||
|
temporary file names to tracked path names. The listing format
|
||||||
|
has two variations:
|
||||||
|
|
||||||
|
. tempname TAB path RS
|
||||||
|
+
|
||||||
|
The first format is what gets used when `--stage` is omitted or
|
||||||
|
is not `--stage=all`. The field tempname is the temporary file
|
||||||
|
name holding the file content and path is the tracked path name in
|
||||||
|
the index. Only the requested entries are output.
|
||||||
|
|
||||||
|
. stage1temp SP stage2temp SP stage3tmp TAB path RS
|
||||||
|
+
|
||||||
|
The second format is what gets used when `--stage=all`. The three
|
||||||
|
stage temporary fields (stage1temp, stage2temp, stage3temp) list the
|
||||||
|
name of the temporary file if there is a stage entry in the index
|
||||||
|
or `.` if there is no stage entry. Paths which only have a stage 0
|
||||||
|
entry will always be omitted from the output.
|
||||||
|
|
||||||
|
In both formats RS (the record separator) is newline by default
|
||||||
|
but will be the null byte if -z was passed on the command line.
|
||||||
|
The temporary file names are always safe strings; they will never
|
||||||
|
contain directory separators or whitespace characters. The path
|
||||||
|
field is always relative to the current directory and the temporary
|
||||||
|
file names are always relative to the top level directory.
|
||||||
|
|
||||||
|
If the object being copied out to a temporary file is a symbolic
|
||||||
|
link the content of the link will be written to a normal file. It is
|
||||||
|
up to the end-user or the Porcelain to make use of this information.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
To update and refresh only the files already checked out::
|
||||||
|
+
|
||||||
|
----------------
|
||||||
|
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Using 'git checkout-index' to "export an entire tree"::
|
||||||
|
The prefix ability basically makes it trivial to use
|
||||||
|
'git checkout-index' as an "export as tree" function.
|
||||||
|
Just read the desired tree into the index, and do:
|
||||||
|
+
|
||||||
|
----------------
|
||||||
|
$ git checkout-index --prefix=git-export-dir/ -a
|
||||||
|
----------------
|
||||||
|
+
|
||||||
|
`git checkout-index` will "export" the index into the specified
|
||||||
|
directory.
|
||||||
|
+
|
||||||
|
The final "/" is important. The exported name is literally just
|
||||||
|
prefixed with the specified string. Contrast this with the
|
||||||
|
following example.
|
||||||
|
|
||||||
|
Export files with a prefix::
|
||||||
|
+
|
||||||
|
----------------
|
||||||
|
$ git checkout-index --prefix=.merged- Makefile
|
||||||
|
----------------
|
||||||
|
+
|
||||||
|
This will check out the currently cached copy of `Makefile`
|
||||||
|
into the file `.merged-Makefile`.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
629
app/src/main/assets/manpages/git-checkout.txt
Normal file
629
app/src/main/assets/manpages/git-checkout.txt
Normal file
@@ -0,0 +1,629 @@
|
|||||||
|
git-checkout(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-checkout - Switch branches or restore working tree files
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git checkout [-q] [-f] [-m] [<branch>]
|
||||||
|
git checkout [-q] [-f] [-m] --detach [<branch>]
|
||||||
|
git checkout [-q] [-f] [-m] [--detach] <commit>
|
||||||
|
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new-branch>] [<start-point>]
|
||||||
|
git checkout <tree-ish> [--] <pathspec>...
|
||||||
|
git checkout <tree-ish> --pathspec-from-file=<file> [--pathspec-file-nul]
|
||||||
|
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>...
|
||||||
|
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] --pathspec-from-file=<file> [--pathspec-file-nul]
|
||||||
|
git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
`git checkout` has two main modes:
|
||||||
|
|
||||||
|
1. **Switch branches**, with `git checkout <branch>`
|
||||||
|
2. **Restore a different version of a file**, for example with
|
||||||
|
`git checkout <commit> <filename>` or `git checkout <filename>`
|
||||||
|
|
||||||
|
See ARGUMENT DISAMBIGUATION below for how Git decides which one to do.
|
||||||
|
|
||||||
|
`git checkout [<branch>]`::
|
||||||
|
Switch to _<branch>_. This sets the current branch to _<branch>_ and
|
||||||
|
updates the files in your working directory. The checkout will fail
|
||||||
|
if there are uncommitted changes to any files where _<branch>_ and
|
||||||
|
your current commit have different content. Uncommitted changes will
|
||||||
|
otherwise be kept.
|
||||||
|
+
|
||||||
|
If _<branch>_ is not found but there does exist a tracking branch in
|
||||||
|
exactly one remote (call it _<remote>_) with a matching name and
|
||||||
|
`--no-guess` is not specified, treat as equivalent to
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git checkout -b <branch> --track <remote>/<branch>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
Running `git checkout` without specifying a branch has no effect except
|
||||||
|
to print out the tracking information for the current branch.
|
||||||
|
|
||||||
|
`git checkout -b <new-branch> [<start-point>]`::
|
||||||
|
|
||||||
|
Create a new branch named _<new-branch>_, start it at _<start-point>_
|
||||||
|
(defaults to the current commit), and check out the new branch.
|
||||||
|
You can use the `--track` or `--no-track` options to set the branch's
|
||||||
|
upstream tracking information.
|
||||||
|
+
|
||||||
|
This will fail if there's an error checking out _<new-branch>_, for
|
||||||
|
example if checking out the `<start-point>` commit would overwrite your
|
||||||
|
uncommitted changes.
|
||||||
|
|
||||||
|
`git checkout -B <branch> [<start-point>]`::
|
||||||
|
|
||||||
|
The same as `-b`, except that if the branch already exists it
|
||||||
|
resets _<branch>_ to the start point instead of failing.
|
||||||
|
|
||||||
|
`git checkout --detach [<branch>]`::
|
||||||
|
`git checkout [--detach] <commit>`::
|
||||||
|
|
||||||
|
The same as `git checkout <branch>`, except that instead of pointing
|
||||||
|
`HEAD` at the branch, it points `HEAD` at the commit ID.
|
||||||
|
See the "DETACHED HEAD" section below for more.
|
||||||
|
+
|
||||||
|
Omitting _<branch>_ detaches `HEAD` at the tip of the current branch.
|
||||||
|
|
||||||
|
`git checkout <tree-ish> [--] <pathspec>...`::
|
||||||
|
`git checkout <tree-ish> --pathspec-from-file=<file> [--pathspec-file-nul]`::
|
||||||
|
|
||||||
|
Replace the specified files and/or directories with the version from
|
||||||
|
the given commit or tree and add them to the index
|
||||||
|
(also known as "staging area").
|
||||||
|
+
|
||||||
|
For example, `git checkout main file.txt` will replace `file.txt`
|
||||||
|
with the version from `main`.
|
||||||
|
|
||||||
|
`git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>...`::
|
||||||
|
`git checkout [-f|--ours|--theirs|-m|--conflict=<style>] --pathspec-from-file=<file> [--pathspec-file-nul]`::
|
||||||
|
|
||||||
|
Replace the specified files and/or directories with the version from
|
||||||
|
the index.
|
||||||
|
+
|
||||||
|
For example, if you check out a commit, edit `file.txt`, and then
|
||||||
|
decide those changes were a mistake, `git checkout file.txt` will
|
||||||
|
discard any unstaged changes to `file.txt`.
|
||||||
|
+
|
||||||
|
This will fail if the file has a merge conflict and you haven't yet run
|
||||||
|
`git add file.txt` (or something equivalent) to mark it as resolved.
|
||||||
|
You can use `-f` to ignore the unmerged files instead of failing, use
|
||||||
|
`--ours` or `--theirs` to replace them with the version from a specific
|
||||||
|
side of the merge, or use `-m` to replace them with the original
|
||||||
|
conflicted merge result.
|
||||||
|
|
||||||
|
`git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>...]`::
|
||||||
|
This is similar to the previous two modes, but lets you use the
|
||||||
|
interactive interface to show the "diff" output and choose which
|
||||||
|
hunks to use in the result. See below for the description of
|
||||||
|
`--patch` option.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`-q`::
|
||||||
|
`--quiet`::
|
||||||
|
Quiet, suppress feedback messages.
|
||||||
|
|
||||||
|
`--progress`::
|
||||||
|
`--no-progress`::
|
||||||
|
Progress status is reported on the standard error stream
|
||||||
|
by default when it is attached to a terminal, unless `--quiet`
|
||||||
|
is specified. This flag enables progress reporting even if not
|
||||||
|
attached to a terminal, regardless of `--quiet`.
|
||||||
|
|
||||||
|
`-f`::
|
||||||
|
`--force`::
|
||||||
|
When switching branches, proceed even if the index or the
|
||||||
|
working tree differs from `HEAD`, and even if there are untracked
|
||||||
|
files in the way. This is used to throw away local changes and
|
||||||
|
any untracked files or directories that are in the way.
|
||||||
|
+
|
||||||
|
When checking out paths from the index, do not fail upon unmerged
|
||||||
|
entries; instead, unmerged entries are ignored.
|
||||||
|
|
||||||
|
`--ours`::
|
||||||
|
`--theirs`::
|
||||||
|
When checking out paths from the index, check out stage #2
|
||||||
|
(`ours`) or #3 (`theirs`) for unmerged paths.
|
||||||
|
+
|
||||||
|
Note that during `git rebase` and `git pull --rebase`, `ours` and
|
||||||
|
`theirs` may appear swapped; `--ours` gives the version from the
|
||||||
|
branch the changes are rebased onto, while `--theirs` gives the
|
||||||
|
version from the branch that holds your work that is being rebased.
|
||||||
|
+
|
||||||
|
This is because `rebase` is used in a workflow that treats the
|
||||||
|
history at the remote as the shared canonical one, and treats the
|
||||||
|
work done on the branch you are rebasing as the third-party work to
|
||||||
|
be integrated, and you are temporarily assuming the role of the
|
||||||
|
keeper of the canonical history during the rebase. As the keeper of
|
||||||
|
the canonical history, you need to view the history from the remote
|
||||||
|
as `ours` (i.e. "our shared canonical history"), while what you did
|
||||||
|
on your side branch as `theirs` (i.e. "one contributor's work on top
|
||||||
|
of it").
|
||||||
|
|
||||||
|
`-b <new-branch>`::
|
||||||
|
Create a new branch named _<new-branch>_, start it at
|
||||||
|
_<start-point>_, and check the resulting branch out;
|
||||||
|
see linkgit:git-branch[1] for details.
|
||||||
|
|
||||||
|
`-B <new-branch>`::
|
||||||
|
The same as `-b`, except that if the branch already exists it
|
||||||
|
resets _<branch>_ to the start point instead of failing.
|
||||||
|
|
||||||
|
`-t`::
|
||||||
|
`--track[=(direct|inherit)]`::
|
||||||
|
When creating a new branch, set up "upstream" configuration. See
|
||||||
|
`--track` in linkgit:git-branch[1] for details. As a convenience,
|
||||||
|
--track without -b implies branch creation.
|
||||||
|
+
|
||||||
|
If no `-b` option is given, the name of the new branch will be
|
||||||
|
derived from the remote-tracking branch, by looking at the local part of
|
||||||
|
the refspec configured for the corresponding remote, and then stripping
|
||||||
|
the initial part up to the "*".
|
||||||
|
This would tell us to use `hack` as the local branch when branching
|
||||||
|
off of `origin/hack` (or `remotes/origin/hack`, or even
|
||||||
|
`refs/remotes/origin/hack`). If the given name has no slash, or the above
|
||||||
|
guessing results in an empty name, the guessing is aborted. You can
|
||||||
|
explicitly give a name with `-b` in such a case.
|
||||||
|
|
||||||
|
`--no-track`::
|
||||||
|
Do not set up "upstream" configuration, even if the
|
||||||
|
`branch.autoSetupMerge` configuration variable is true.
|
||||||
|
|
||||||
|
`--guess`::
|
||||||
|
`--no-guess`::
|
||||||
|
If _<branch>_ is not found but there does exist a tracking
|
||||||
|
branch in exactly one remote (call it _<remote>_) with a
|
||||||
|
matching name, treat as equivalent to
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git checkout -b <branch> --track <remote>/<branch>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
If the branch exists in multiple remotes and one of them is named by
|
||||||
|
the `checkout.defaultRemote` configuration variable, we'll use that
|
||||||
|
one for the purposes of disambiguation, even if the _<branch>_ isn't
|
||||||
|
unique across all remotes. Set it to
|
||||||
|
e.g. `checkout.defaultRemote=origin` to always checkout remote
|
||||||
|
branches from there if _<branch>_ is ambiguous but exists on the
|
||||||
|
'origin' remote. See also `checkout.defaultRemote` in
|
||||||
|
linkgit:git-config[1].
|
||||||
|
+
|
||||||
|
`--guess` is the default behavior. Use `--no-guess` to disable it.
|
||||||
|
+
|
||||||
|
The default behavior can be set via the `checkout.guess` configuration
|
||||||
|
variable.
|
||||||
|
|
||||||
|
`-l`::
|
||||||
|
Create the new branch's reflog; see linkgit:git-branch[1] for
|
||||||
|
details.
|
||||||
|
|
||||||
|
`-d`::
|
||||||
|
`--detach`::
|
||||||
|
Rather than checking out a branch to work on it, check out a
|
||||||
|
commit for inspection and discardable experiments.
|
||||||
|
This is the default behavior of `git checkout <commit>` when
|
||||||
|
_<commit>_ is not a branch name. See the "DETACHED HEAD" section
|
||||||
|
below for details.
|
||||||
|
|
||||||
|
`--orphan <new-branch>`::
|
||||||
|
Create a new unborn branch, named _<new-branch>_, started from
|
||||||
|
_<start-point>_ and switch to it. The first commit made on this
|
||||||
|
new branch will have no parents and it will be the root of a new
|
||||||
|
history totally disconnected from all the other branches and
|
||||||
|
commits.
|
||||||
|
+
|
||||||
|
The index and the working tree are adjusted as if you had previously run
|
||||||
|
`git checkout <start-point>`. This allows you to start a new history
|
||||||
|
that records a set of paths similar to _<start-point>_ by easily running
|
||||||
|
`git commit -a` to make the root commit.
|
||||||
|
+
|
||||||
|
This can be useful when you want to publish the tree from a commit
|
||||||
|
without exposing its full history. You might want to do this to publish
|
||||||
|
an open source branch of a project whose current tree is "clean", but
|
||||||
|
whose full history contains proprietary or otherwise encumbered bits of
|
||||||
|
code.
|
||||||
|
+
|
||||||
|
If you want to start a disconnected history that records a set of paths
|
||||||
|
that is totally different from the one of _<start-point>_, then you should
|
||||||
|
clear the index and the working tree right after creating the orphan
|
||||||
|
branch by running `git rm -rf .` from the top level of the working tree.
|
||||||
|
Afterwards you will be ready to prepare your new files, repopulating the
|
||||||
|
working tree, by copying them from elsewhere, extracting a tarball, etc.
|
||||||
|
|
||||||
|
`--ignore-skip-worktree-bits`::
|
||||||
|
In sparse checkout mode, `git checkout -- <path>...` would
|
||||||
|
update only entries matched by _<paths>_ and sparse patterns
|
||||||
|
in `$GIT_DIR/info/sparse-checkout`. This option ignores
|
||||||
|
the sparse patterns and adds back any files in `<path>...`.
|
||||||
|
|
||||||
|
`-m`::
|
||||||
|
`--merge`::
|
||||||
|
When switching branches,
|
||||||
|
if you have local modifications to one or more files that
|
||||||
|
are different between the current branch and the branch to
|
||||||
|
which you are switching, the command refuses to switch
|
||||||
|
branches in order to preserve your modifications in context.
|
||||||
|
However, with this option, a three-way merge between the current
|
||||||
|
branch, your working tree contents, and the new branch
|
||||||
|
is done, and you will be on the new branch.
|
||||||
|
+
|
||||||
|
When a merge conflict happens, the index entries for conflicting
|
||||||
|
paths are left unmerged, and you need to resolve the conflicts
|
||||||
|
and mark the resolved paths with `git add` (or `git rm` if the merge
|
||||||
|
should result in deletion of the path).
|
||||||
|
+
|
||||||
|
When checking out paths from the index, this option lets you recreate
|
||||||
|
the conflicted merge in the specified paths. This option cannot be
|
||||||
|
used when checking out paths from a tree-ish.
|
||||||
|
+
|
||||||
|
When switching branches with `--merge`, staged changes may be lost.
|
||||||
|
|
||||||
|
`--conflict=<style>`::
|
||||||
|
The same as `--merge` option above, but changes the way the
|
||||||
|
conflicting hunks are presented, overriding the
|
||||||
|
`merge.conflictStyle` configuration variable. Possible values are
|
||||||
|
`merge` (default), `diff3`, and `zdiff3`.
|
||||||
|
|
||||||
|
`-p`::
|
||||||
|
`--patch`::
|
||||||
|
Interactively select hunks in the difference between the
|
||||||
|
_<tree-ish>_ (or the index, if unspecified) and the working
|
||||||
|
tree. The chosen hunks are then applied in reverse to the
|
||||||
|
working tree (and if a _<tree-ish>_ was specified, the index).
|
||||||
|
+
|
||||||
|
This means that you can use `git checkout -p` to selectively discard
|
||||||
|
edits from your current working tree. See the "Interactive Mode"
|
||||||
|
section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
|
||||||
|
+
|
||||||
|
Note that this option uses the no overlay mode by default (see also
|
||||||
|
`--overlay`), and currently doesn't support overlay mode.
|
||||||
|
|
||||||
|
include::diff-context-options.adoc[]
|
||||||
|
|
||||||
|
`--ignore-other-worktrees`::
|
||||||
|
`git checkout` refuses when the wanted branch is already checked
|
||||||
|
out or otherwise in use by another worktree. This option makes
|
||||||
|
it check the branch out anyway. In other words, the branch can
|
||||||
|
be in use by more than one worktree.
|
||||||
|
|
||||||
|
`--overwrite-ignore`::
|
||||||
|
`--no-overwrite-ignore`::
|
||||||
|
Silently overwrite ignored files when switching branches. This
|
||||||
|
is the default behavior. Use `--no-overwrite-ignore` to abort
|
||||||
|
the operation when the new branch contains ignored files.
|
||||||
|
|
||||||
|
`--recurse-submodules`::
|
||||||
|
`--no-recurse-submodules`::
|
||||||
|
Using `--recurse-submodules` will update the content of all active
|
||||||
|
submodules according to the commit recorded in the superproject. If
|
||||||
|
local modifications in a submodule would be overwritten the checkout
|
||||||
|
will fail unless `-f` is used. If nothing (or `--no-recurse-submodules`)
|
||||||
|
is used, submodules working trees will not be updated.
|
||||||
|
Just like linkgit:git-submodule[1], this will detach `HEAD` of the
|
||||||
|
submodule.
|
||||||
|
|
||||||
|
`--overlay`::
|
||||||
|
`--no-overlay`::
|
||||||
|
In the default overlay mode, `git checkout` never
|
||||||
|
removes files from the index or the working tree. When
|
||||||
|
specifying `--no-overlay`, files that appear in the index and
|
||||||
|
working tree, but not in _<tree-ish>_ are removed, to make them
|
||||||
|
match _<tree-ish>_ exactly.
|
||||||
|
|
||||||
|
`--pathspec-from-file=<file>`::
|
||||||
|
Pathspec is passed in _<file>_ instead of commandline args. If
|
||||||
|
_<file>_ is exactly `-` then standard input is used. Pathspec
|
||||||
|
elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be
|
||||||
|
quoted as explained for the configuration variable `core.quotePath`
|
||||||
|
(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
|
||||||
|
global `--literal-pathspecs`.
|
||||||
|
|
||||||
|
`--pathspec-file-nul`::
|
||||||
|
Only meaningful with `--pathspec-from-file`. Pathspec elements are
|
||||||
|
separated with _NUL_ character and all other characters are taken
|
||||||
|
literally (including newlines and quotes).
|
||||||
|
|
||||||
|
`<branch>`::
|
||||||
|
Branch to checkout; if it refers to a branch (i.e., a name that,
|
||||||
|
when prepended with "refs/heads/", is a valid ref), then that
|
||||||
|
branch is checked out. Otherwise, if it refers to a valid
|
||||||
|
commit, your `HEAD` becomes "detached" and you are no longer on
|
||||||
|
any branch (see below for details).
|
||||||
|
+
|
||||||
|
You can use the `@{-N}` syntax to refer to the N-th last
|
||||||
|
branch/commit checked out using "git checkout" operation. You may
|
||||||
|
also specify `-` which is synonymous to `@{-1}`.
|
||||||
|
+
|
||||||
|
As a special case, you may use `<rev-a>...<rev-b>` as a shortcut for the
|
||||||
|
merge base of _<rev-a>_ and _<rev-b>_ if there is exactly one merge base. You can
|
||||||
|
leave out at most one of _<rev-a>_ and _<rev-b>_, in which case it defaults to `HEAD`.
|
||||||
|
|
||||||
|
_<new-branch>_::
|
||||||
|
Name for the new branch.
|
||||||
|
|
||||||
|
_<start-point>_::
|
||||||
|
The name of a commit at which to start the new branch; see
|
||||||
|
linkgit:git-branch[1] for details. Defaults to `HEAD`.
|
||||||
|
+
|
||||||
|
As a special case, you may use `<rev-a>...<rev-b>` as a shortcut for the
|
||||||
|
merge base of _<rev-a>_ and _<rev-b>_ if there is exactly one merge base. You can
|
||||||
|
leave out at most one of _<rev-a>_ and _<rev-b>_, in which case it defaults to `HEAD`.
|
||||||
|
|
||||||
|
_<tree-ish>_::
|
||||||
|
Tree to checkout from (when paths are given). If not specified,
|
||||||
|
the index will be used.
|
||||||
|
+
|
||||||
|
As a special case, you may use `<rev-a>...<rev-b>` as a shortcut for the
|
||||||
|
merge base of _<rev-a>_ and _<rev-b>_ if there is exactly one merge base. You can
|
||||||
|
leave out at most one of _<rev-a>_ and _<rev-b>_, in which case it defaults to `HEAD`.
|
||||||
|
|
||||||
|
`--`::
|
||||||
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
|
`<pathspec>...`::
|
||||||
|
Limits the paths affected by the operation.
|
||||||
|
+
|
||||||
|
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
|
||||||
|
|
||||||
|
DETACHED HEAD
|
||||||
|
-------------
|
||||||
|
`HEAD` normally refers to a named branch (e.g. `master`). Meanwhile, each
|
||||||
|
branch refers to a specific commit. Let's look at a repo with three
|
||||||
|
commits, one of them tagged, and with branch `master` checked out:
|
||||||
|
|
||||||
|
------------
|
||||||
|
HEAD (refers to branch 'master')
|
||||||
|
|
|
||||||
|
v
|
||||||
|
a---b---c branch 'master' (refers to commit 'c')
|
||||||
|
^
|
||||||
|
|
|
||||||
|
tag 'v2.0' (refers to commit 'b')
|
||||||
|
------------
|
||||||
|
|
||||||
|
When a commit is created in this state, the branch is updated to refer to
|
||||||
|
the new commit. Specifically, `git commit` creates a new commit `d`, whose
|
||||||
|
parent is commit `c`, and then updates branch `master` to refer to new
|
||||||
|
commit `d`. `HEAD` still refers to branch `master` and so indirectly now refers
|
||||||
|
to commit `d`:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit; git add; git commit
|
||||||
|
|
||||||
|
HEAD (refers to branch 'master')
|
||||||
|
|
|
||||||
|
v
|
||||||
|
a---b---c---d branch 'master' (refers to commit 'd')
|
||||||
|
^
|
||||||
|
|
|
||||||
|
tag 'v2.0' (refers to commit 'b')
|
||||||
|
------------
|
||||||
|
|
||||||
|
It is sometimes useful to be able to checkout a commit that is not at
|
||||||
|
the tip of any named branch, or even to create a new commit that is not
|
||||||
|
referenced by a named branch. Let's look at what happens when we
|
||||||
|
checkout commit `b` (here we show two ways this may be done):
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout v2.0 # or
|
||||||
|
$ git checkout master^^
|
||||||
|
|
||||||
|
HEAD (refers to commit 'b')
|
||||||
|
|
|
||||||
|
v
|
||||||
|
a---b---c---d branch 'master' (refers to commit 'd')
|
||||||
|
^
|
||||||
|
|
|
||||||
|
tag 'v2.0' (refers to commit 'b')
|
||||||
|
------------
|
||||||
|
|
||||||
|
Notice that regardless of which checkout command we use, `HEAD` now refers
|
||||||
|
directly to commit `b`. This is known as being in detached `HEAD` state.
|
||||||
|
It means simply that `HEAD` refers to a specific commit, as opposed to
|
||||||
|
referring to a named branch. Let's see what happens when we create a commit:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit; git add; git commit
|
||||||
|
|
||||||
|
HEAD (refers to commit 'e')
|
||||||
|
|
|
||||||
|
v
|
||||||
|
e
|
||||||
|
/
|
||||||
|
a---b---c---d branch 'master' (refers to commit 'd')
|
||||||
|
^
|
||||||
|
|
|
||||||
|
tag 'v2.0' (refers to commit 'b')
|
||||||
|
------------
|
||||||
|
|
||||||
|
There is now a new commit `e`, but it is referenced only by `HEAD`. We can
|
||||||
|
of course add yet another commit in this state:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit; git add; git commit
|
||||||
|
|
||||||
|
HEAD (refers to commit 'f')
|
||||||
|
|
|
||||||
|
v
|
||||||
|
e---f
|
||||||
|
/
|
||||||
|
a---b---c---d branch 'master' (refers to commit 'd')
|
||||||
|
^
|
||||||
|
|
|
||||||
|
tag 'v2.0' (refers to commit 'b')
|
||||||
|
------------
|
||||||
|
|
||||||
|
In fact, we can perform all the normal Git operations. But, let's look
|
||||||
|
at what happens when we then checkout `master`:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout master
|
||||||
|
|
||||||
|
HEAD (refers to branch 'master')
|
||||||
|
e---f |
|
||||||
|
/ v
|
||||||
|
a---b---c---d branch 'master' (refers to commit 'd')
|
||||||
|
^
|
||||||
|
|
|
||||||
|
tag 'v2.0' (refers to commit 'b')
|
||||||
|
------------
|
||||||
|
|
||||||
|
It is important to realize that at this point nothing refers to commit
|
||||||
|
`f`. Eventually commit `f` (and by extension commit `e`) will be deleted
|
||||||
|
by the routine Git garbage collection process, unless we create a reference
|
||||||
|
before that happens. If we have not yet moved away from commit `f`,
|
||||||
|
any of these will create a reference to it:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout -b foo # or "git switch -c foo" <1>
|
||||||
|
$ git branch foo <2>
|
||||||
|
$ git tag foo <3>
|
||||||
|
------------
|
||||||
|
<1> creates a new branch `foo`, which refers to commit `f`, and then
|
||||||
|
updates `HEAD` to refer to branch `foo`. In other words, we'll no longer
|
||||||
|
be in detached `HEAD` state after this command.
|
||||||
|
<2> similarly creates a new branch `foo`, which refers to commit `f`,
|
||||||
|
but leaves `HEAD` detached.
|
||||||
|
<3> creates a new tag `foo`, which refers to commit `f`,
|
||||||
|
leaving `HEAD` detached.
|
||||||
|
|
||||||
|
If we have moved away from commit `f`, then we must first recover its object
|
||||||
|
name (typically by using git reflog), and then we can create a reference to
|
||||||
|
it. For example, to see the last two commits to which `HEAD` referred, we
|
||||||
|
can use either of these commands:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git reflog -2 HEAD # or
|
||||||
|
$ git log -g -2 HEAD
|
||||||
|
------------
|
||||||
|
|
||||||
|
ARGUMENT DISAMBIGUATION
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
When you run `git checkout <something>`, Git tries to guess whether
|
||||||
|
_<something>_ is intended to be a branch, a commit, or a set of file(s),
|
||||||
|
and then either switches to that branch or commit, or restores the
|
||||||
|
specified files.
|
||||||
|
|
||||||
|
If there's any ambiguity, Git will treat `<something>` as a branch or
|
||||||
|
commit, but you can use the double dash `--` to force Git to treat the
|
||||||
|
parameter as a list of files and/or directories, like this:
|
||||||
|
|
||||||
|
----------
|
||||||
|
git checkout -- file.txt
|
||||||
|
----------
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
=== 1. Paths
|
||||||
|
|
||||||
|
The following sequence checks out the `master` branch, reverts
|
||||||
|
the `Makefile` to two revisions back, deletes `hello.c` by
|
||||||
|
mistake, and gets it back from the index.
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout master <1>
|
||||||
|
$ git checkout master~2 Makefile <2>
|
||||||
|
$ rm -f hello.c
|
||||||
|
$ git checkout hello.c <3>
|
||||||
|
------------
|
||||||
|
<1> switch branch
|
||||||
|
<2> take a file out of another commit
|
||||||
|
<3> restore `hello.c` from the index
|
||||||
|
|
||||||
|
If you want to check out _all_ C source files out of the index,
|
||||||
|
you can say
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout -- '*.c'
|
||||||
|
------------
|
||||||
|
|
||||||
|
Note the quotes around `*.c`. The file `hello.c` will also be
|
||||||
|
checked out, even though it is no longer in the working tree,
|
||||||
|
because the file globbing is used to match entries in the index
|
||||||
|
(not in the working tree by the shell).
|
||||||
|
|
||||||
|
If you have an unfortunate branch that is named `hello.c`, this
|
||||||
|
step would be confused as an instruction to switch to that branch.
|
||||||
|
You should instead write:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout -- hello.c
|
||||||
|
------------
|
||||||
|
|
||||||
|
=== 2. Merge
|
||||||
|
|
||||||
|
After working in the wrong branch, switching to the correct
|
||||||
|
branch would be done using:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout mytopic
|
||||||
|
------------
|
||||||
|
|
||||||
|
However, your "wrong" branch and correct `mytopic` branch may
|
||||||
|
differ in files that you have modified locally, in which case
|
||||||
|
the above checkout would fail like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout mytopic
|
||||||
|
error: You have local changes to 'frotz'; not switching branches.
|
||||||
|
------------
|
||||||
|
|
||||||
|
You can give the `-m` flag to the command, which would try a
|
||||||
|
three-way merge:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout -m mytopic
|
||||||
|
Auto-merging frotz
|
||||||
|
------------
|
||||||
|
|
||||||
|
After this three-way merge, the local modifications are _not_
|
||||||
|
registered in your index file, so `git diff` would show you what
|
||||||
|
changes you made since the tip of the new branch.
|
||||||
|
|
||||||
|
=== 3. Merge conflict
|
||||||
|
|
||||||
|
When a merge conflict happens during switching branches with
|
||||||
|
the `-m` option, you would see something like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout -m mytopic
|
||||||
|
Auto-merging frotz
|
||||||
|
ERROR: Merge conflict in frotz
|
||||||
|
fatal: merge program failed
|
||||||
|
------------
|
||||||
|
|
||||||
|
At this point, `git diff` shows the changes cleanly merged as in
|
||||||
|
the previous example, as well as the changes in the conflicted
|
||||||
|
files. Edit and resolve the conflict and mark it resolved with
|
||||||
|
`git add` as usual:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit frotz
|
||||||
|
$ git add frotz
|
||||||
|
------------
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/checkout.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-switch[1],
|
||||||
|
linkgit:git-restore[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
259
app/src/main/assets/manpages/git-cherry-pick.txt
Normal file
259
app/src/main/assets/manpages/git-cherry-pick.txt
Normal file
@@ -0,0 +1,259 @@
|
|||||||
|
git-cherry-pick(1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-cherry-pick - Apply the changes introduced by some existing commits
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git cherry-pick' [--edit] [-n] [-m <parent-number>] [-s] [-x] [--ff]
|
||||||
|
[-S[<keyid>]] <commit>...
|
||||||
|
'git cherry-pick' (--continue | --skip | --abort | --quit)
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Given one or more existing commits, apply the change each one
|
||||||
|
introduces, recording a new commit for each. This requires your
|
||||||
|
working tree to be clean (no modifications from the HEAD commit).
|
||||||
|
|
||||||
|
When it is not obvious how to apply a change, the following
|
||||||
|
happens:
|
||||||
|
|
||||||
|
1. The current branch and `HEAD` pointer stay at the last commit
|
||||||
|
successfully made.
|
||||||
|
2. The `CHERRY_PICK_HEAD` ref is set to point at the commit that
|
||||||
|
introduced the change that is difficult to apply.
|
||||||
|
3. Paths in which the change applied cleanly are updated both
|
||||||
|
in the index file and in your working tree.
|
||||||
|
4. For conflicting paths, the index file records up to three
|
||||||
|
versions, as described in the "TRUE MERGE" section of
|
||||||
|
linkgit:git-merge[1]. The working tree files will include
|
||||||
|
a description of the conflict bracketed by the usual
|
||||||
|
conflict markers `<<<<<<<` and `>>>>>>>`.
|
||||||
|
5. No other modifications are made.
|
||||||
|
|
||||||
|
See linkgit:git-merge[1] for some hints on resolving such
|
||||||
|
conflicts.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<commit>...::
|
||||||
|
Commits to cherry-pick.
|
||||||
|
For a more complete list of ways to spell commits, see
|
||||||
|
linkgit:gitrevisions[7].
|
||||||
|
Sets of commits can be passed but no traversal is done by
|
||||||
|
default, as if the `--no-walk` option was specified, see
|
||||||
|
linkgit:git-rev-list[1]. Note that specifying a range will
|
||||||
|
feed all <commit>... arguments to a single revision walk
|
||||||
|
(see a later example that uses 'maint master..next').
|
||||||
|
|
||||||
|
-e::
|
||||||
|
--edit::
|
||||||
|
With this option, 'git cherry-pick' will let you edit the commit
|
||||||
|
message prior to committing.
|
||||||
|
|
||||||
|
--cleanup=<mode>::
|
||||||
|
This option determines how the commit message will be cleaned up before
|
||||||
|
being passed on to the commit machinery. See linkgit:git-commit[1] for more
|
||||||
|
details. In particular, if the '<mode>' is given a value of `scissors`,
|
||||||
|
scissors will be appended to `MERGE_MSG` before being passed on in the case
|
||||||
|
of a conflict.
|
||||||
|
|
||||||
|
-x::
|
||||||
|
When recording the commit, append a line that says
|
||||||
|
"(cherry picked from commit ...)" to the original commit
|
||||||
|
message in order to indicate which commit this change was
|
||||||
|
cherry-picked from. This is done only for cherry
|
||||||
|
picks without conflicts. Do not use this option if
|
||||||
|
you are cherry-picking from your private branch because
|
||||||
|
the information is useless to the recipient. If on the
|
||||||
|
other hand you are cherry-picking between two publicly
|
||||||
|
visible branches (e.g. backporting a fix to a
|
||||||
|
maintenance branch for an older release from a
|
||||||
|
development branch), adding this information can be
|
||||||
|
useful.
|
||||||
|
|
||||||
|
-r::
|
||||||
|
It used to be that the command defaulted to do `-x`
|
||||||
|
described above, and `-r` was to disable it. Now the
|
||||||
|
default is not to do `-x` so this option is a no-op.
|
||||||
|
|
||||||
|
-m <parent-number>::
|
||||||
|
--mainline <parent-number>::
|
||||||
|
Usually you cannot cherry-pick a merge because you do not know which
|
||||||
|
side of the merge should be considered the mainline. This
|
||||||
|
option specifies the parent number (starting from 1) of
|
||||||
|
the mainline and allows cherry-pick to replay the change
|
||||||
|
relative to the specified parent.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
--no-commit::
|
||||||
|
Usually the command automatically creates a sequence of commits.
|
||||||
|
This flag applies the changes necessary to cherry-pick
|
||||||
|
each named commit to your working tree and the index,
|
||||||
|
without making any commit. In addition, when this
|
||||||
|
option is used, your index does not have to match the
|
||||||
|
HEAD commit. The cherry-pick is done against the
|
||||||
|
beginning state of your index.
|
||||||
|
+
|
||||||
|
This is useful when cherry-picking more than one commits'
|
||||||
|
effect to your index in a row.
|
||||||
|
|
||||||
|
-s::
|
||||||
|
--signoff::
|
||||||
|
Add a `Signed-off-by` trailer at the end of the commit message.
|
||||||
|
See the signoff option in linkgit:git-commit[1] for more information.
|
||||||
|
|
||||||
|
-S[<keyid>]::
|
||||||
|
--gpg-sign[=<keyid>]::
|
||||||
|
--no-gpg-sign::
|
||||||
|
GPG-sign commits. The `keyid` argument is optional and
|
||||||
|
defaults to the committer identity; if specified, it must be
|
||||||
|
stuck to the option without a space. `--no-gpg-sign` is useful to
|
||||||
|
countermand both `commit.gpgSign` configuration variable, and
|
||||||
|
earlier `--gpg-sign`.
|
||||||
|
|
||||||
|
--ff::
|
||||||
|
If the current HEAD is the same as the parent of the
|
||||||
|
cherry-pick'ed commit, then a fast forward to this commit will
|
||||||
|
be performed.
|
||||||
|
|
||||||
|
--allow-empty::
|
||||||
|
By default, cherry-picking an empty commit will fail,
|
||||||
|
indicating that an explicit invocation of `git commit
|
||||||
|
--allow-empty` is required. This option overrides that
|
||||||
|
behavior, allowing empty commits to be preserved automatically
|
||||||
|
in a cherry-pick. Note that when "--ff" is in effect, empty
|
||||||
|
commits that meet the "fast-forward" requirement will be kept
|
||||||
|
even without this option. Note also, that use of this option only
|
||||||
|
keeps commits that were initially empty (i.e. the commit recorded the
|
||||||
|
same tree as its parent). Commits which are made empty due to a
|
||||||
|
previous commit will cause the cherry-pick to fail. To force the
|
||||||
|
inclusion of those commits, use `--empty=keep`.
|
||||||
|
|
||||||
|
--allow-empty-message::
|
||||||
|
By default, cherry-picking a commit with an empty message will fail.
|
||||||
|
This option overrides that behavior, allowing commits with empty
|
||||||
|
messages to be cherry picked.
|
||||||
|
|
||||||
|
--empty=(drop|keep|stop)::
|
||||||
|
How to handle commits being cherry-picked that are redundant with
|
||||||
|
changes already in the current history.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
`drop`;;
|
||||||
|
The commit will be dropped.
|
||||||
|
`keep`;;
|
||||||
|
The commit will be kept. Implies `--allow-empty`.
|
||||||
|
`stop`;;
|
||||||
|
The cherry-pick will stop when the commit is applied, allowing
|
||||||
|
you to examine the commit. This is the default behavior.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
Note that `--empty=drop` and `--empty=stop` only specify how to handle a
|
||||||
|
commit that was not initially empty, but rather became empty due to a previous
|
||||||
|
commit. Commits that were initially empty will still cause the cherry-pick to
|
||||||
|
fail unless one of `--empty=keep` or `--allow-empty` are specified.
|
||||||
|
+
|
||||||
|
|
||||||
|
--keep-redundant-commits::
|
||||||
|
Deprecated synonym for `--empty=keep`.
|
||||||
|
|
||||||
|
--strategy=<strategy>::
|
||||||
|
Use the given merge strategy. Should only be used once.
|
||||||
|
See the MERGE STRATEGIES section in linkgit:git-merge[1]
|
||||||
|
for details.
|
||||||
|
|
||||||
|
-X<option>::
|
||||||
|
--strategy-option=<option>::
|
||||||
|
Pass the merge strategy-specific option through to the
|
||||||
|
merge strategy. See linkgit:git-merge[1] for details.
|
||||||
|
|
||||||
|
include::rerere-options.adoc[]
|
||||||
|
|
||||||
|
SEQUENCER SUBCOMMANDS
|
||||||
|
---------------------
|
||||||
|
include::sequencer.adoc[]
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
`git cherry-pick master`::
|
||||||
|
|
||||||
|
Apply the change introduced by the commit at the tip of the
|
||||||
|
master branch and create a new commit with this change.
|
||||||
|
|
||||||
|
`git cherry-pick ..master`::
|
||||||
|
`git cherry-pick ^HEAD master`::
|
||||||
|
|
||||||
|
Apply the changes introduced by all commits that are ancestors
|
||||||
|
of master but not of HEAD to produce new commits.
|
||||||
|
|
||||||
|
`git cherry-pick maint next ^master`::
|
||||||
|
`git cherry-pick maint master..next`::
|
||||||
|
|
||||||
|
Apply the changes introduced by all commits that are
|
||||||
|
ancestors of maint or next, but not master or any of its
|
||||||
|
ancestors. Note that the latter does not mean `maint` and
|
||||||
|
everything between `master` and `next`; specifically,
|
||||||
|
`maint` will not be used if it is included in `master`.
|
||||||
|
|
||||||
|
`git cherry-pick master~4 master~2`::
|
||||||
|
|
||||||
|
Apply the changes introduced by the fifth and third last
|
||||||
|
commits pointed to by master and create 2 new commits with
|
||||||
|
these changes.
|
||||||
|
|
||||||
|
`git cherry-pick -n master~1 next`::
|
||||||
|
|
||||||
|
Apply to the working tree and the index the changes introduced
|
||||||
|
by the second last commit pointed to by master and by the last
|
||||||
|
commit pointed to by next, but do not create any commit with
|
||||||
|
these changes.
|
||||||
|
|
||||||
|
`git cherry-pick --ff ..next`::
|
||||||
|
|
||||||
|
If history is linear and HEAD is an ancestor of next, update
|
||||||
|
the working tree and advance the HEAD pointer to match next.
|
||||||
|
Otherwise, apply the changes introduced by those commits that
|
||||||
|
are in next but not HEAD to the current branch, creating a new
|
||||||
|
commit for each new change.
|
||||||
|
|
||||||
|
`git rev-list --reverse master -- README | git cherry-pick -n --stdin`::
|
||||||
|
|
||||||
|
Apply the changes introduced by all commits on the master
|
||||||
|
branch that touched README to the working tree and index,
|
||||||
|
so the result can be inspected and made into a single new
|
||||||
|
commit if suitable.
|
||||||
|
|
||||||
|
The following sequence attempts to backport a patch, bails out because
|
||||||
|
the code the patch applies to has changed too much, and then tries
|
||||||
|
again, this time exercising more care about matching up context lines.
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git cherry-pick topic^ <1>
|
||||||
|
$ git diff <2>
|
||||||
|
$ git cherry-pick --abort <3>
|
||||||
|
$ git cherry-pick -Xpatience topic^ <4>
|
||||||
|
------------
|
||||||
|
<1> apply the change that would be shown by `git show topic^`.
|
||||||
|
In this example, the patch does not apply cleanly, so
|
||||||
|
information about the conflict is written to the index and
|
||||||
|
working tree and no new commit results.
|
||||||
|
<2> summarize changes to be reconciled
|
||||||
|
<3> cancel the cherry-pick. In other words, return to the
|
||||||
|
pre-cherry-pick state, preserving any local modifications
|
||||||
|
you had in the working tree.
|
||||||
|
<4> try to apply the change introduced by `topic^` again,
|
||||||
|
spending extra time to avoid mistakes based on incorrectly
|
||||||
|
matching context lines.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-revert[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
145
app/src/main/assets/manpages/git-cherry.txt
Normal file
145
app/src/main/assets/manpages/git-cherry.txt
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
git-cherry(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-cherry - Find commits yet to be applied to upstream
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git cherry' [-v] [<upstream> [<head> [<limit>]]]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Determine whether there are commits in `<head>..<upstream>` that are
|
||||||
|
equivalent to those in the range `<limit>..<head>`.
|
||||||
|
|
||||||
|
The equivalence test is based on the diff, after removing whitespace
|
||||||
|
and line numbers. git-cherry therefore detects when commits have been
|
||||||
|
"copied" by means of linkgit:git-cherry-pick[1], linkgit:git-am[1] or
|
||||||
|
linkgit:git-rebase[1].
|
||||||
|
|
||||||
|
Outputs the SHA1 of every commit in `<limit>..<head>`, prefixed with
|
||||||
|
`-` for commits that have an equivalent in <upstream>, and `+` for
|
||||||
|
commits that do not.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-v::
|
||||||
|
Show the commit subjects next to the SHA1s.
|
||||||
|
|
||||||
|
<upstream>::
|
||||||
|
Upstream branch to search for equivalent commits.
|
||||||
|
Defaults to the upstream branch of HEAD.
|
||||||
|
|
||||||
|
<head>::
|
||||||
|
Working branch; defaults to HEAD.
|
||||||
|
|
||||||
|
<limit>::
|
||||||
|
Do not report commits up to (and including) limit.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Patch workflows
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
git-cherry is frequently used in patch-based workflows (see
|
||||||
|
linkgit:gitworkflows[7]) to determine if a series of patches has been
|
||||||
|
applied by the upstream maintainer. In such a workflow you might
|
||||||
|
create and send a topic branch like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git checkout -b topic origin/master
|
||||||
|
# work and create some commits
|
||||||
|
$ git format-patch origin/master
|
||||||
|
$ git send-email ... 00*
|
||||||
|
------------
|
||||||
|
|
||||||
|
Later, you can see whether your changes have been applied by saying
|
||||||
|
(still on `topic`):
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git fetch # update your notion of origin/master
|
||||||
|
$ git cherry -v
|
||||||
|
------------
|
||||||
|
|
||||||
|
Concrete example
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In a situation where topic consisted of three commits, and the
|
||||||
|
maintainer applied two of them, the situation might look like:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git log --graph --oneline --decorate --boundary origin/master...topic
|
||||||
|
* 7654321 (origin/master) upstream tip commit
|
||||||
|
[... snip some other commits ...]
|
||||||
|
* cccc111 cherry-pick of C
|
||||||
|
* aaaa111 cherry-pick of A
|
||||||
|
[... snip a lot more that has happened ...]
|
||||||
|
| * cccc000 (topic) commit C
|
||||||
|
| * bbbb000 commit B
|
||||||
|
| * aaaa000 commit A
|
||||||
|
|/
|
||||||
|
o 1234567 branch point
|
||||||
|
------------
|
||||||
|
|
||||||
|
In such cases, git-cherry shows a concise summary of what has yet to
|
||||||
|
be applied:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git cherry origin/master topic
|
||||||
|
- cccc000... commit C
|
||||||
|
+ bbbb000... commit B
|
||||||
|
- aaaa000... commit A
|
||||||
|
------------
|
||||||
|
|
||||||
|
Here, we see that the commits A and C (marked with `-`) can be
|
||||||
|
dropped from your `topic` branch when you rebase it on top of
|
||||||
|
`origin/master`, while the commit B (marked with `+`) still needs to
|
||||||
|
be kept so that it will be sent to be applied to `origin/master`.
|
||||||
|
|
||||||
|
|
||||||
|
Using a limit
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The optional <limit> is useful in cases where your topic is based on
|
||||||
|
other work that is not in upstream. Expanding on the previous
|
||||||
|
example, this might look like:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git log --graph --oneline --decorate --boundary origin/master...topic
|
||||||
|
* 7654321 (origin/master) upstream tip commit
|
||||||
|
[... snip some other commits ...]
|
||||||
|
* cccc111 cherry-pick of C
|
||||||
|
* aaaa111 cherry-pick of A
|
||||||
|
[... snip a lot more that has happened ...]
|
||||||
|
| * cccc000 (topic) commit C
|
||||||
|
| * bbbb000 commit B
|
||||||
|
| * aaaa000 commit A
|
||||||
|
| * 0000fff (base) unpublished stuff F
|
||||||
|
[... snip ...]
|
||||||
|
| * 0000aaa unpublished stuff A
|
||||||
|
|/
|
||||||
|
o 1234567 merge-base between upstream and topic
|
||||||
|
------------
|
||||||
|
|
||||||
|
By specifying `base` as the limit, you can avoid listing commits
|
||||||
|
between `base` and `topic`:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git cherry origin/master topic base
|
||||||
|
- cccc000... commit C
|
||||||
|
+ bbbb000... commit B
|
||||||
|
- aaaa000... commit A
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-patch-id[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
25
app/src/main/assets/manpages/git-citool.txt
Normal file
25
app/src/main/assets/manpages/git-citool.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
git-citool(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-citool - Graphical alternative to git-commit
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git citool'
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
A Tcl/Tk based graphical interface to review modified files, stage
|
||||||
|
them into the index, enter a commit message and record the new
|
||||||
|
commit onto the current branch. This interface is an alternative
|
||||||
|
to the less interactive 'git commit' program.
|
||||||
|
|
||||||
|
'git citool' is actually a standard alias for `git gui citool`.
|
||||||
|
See linkgit:git-gui[1] for more details.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
153
app/src/main/assets/manpages/git-clean.txt
Normal file
153
app/src/main/assets/manpages/git-clean.txt
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
git-clean(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-clean - Remove untracked files from the working tree
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git clean' [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Cleans the working tree by recursively removing files that are not
|
||||||
|
under version control, starting from the current directory.
|
||||||
|
|
||||||
|
Normally, only files unknown to Git are removed, but if the `-x`
|
||||||
|
option is specified, ignored files are also removed. This can, for
|
||||||
|
example, be useful to remove all build products.
|
||||||
|
|
||||||
|
If any optional `<pathspec>...` arguments are given, only those paths
|
||||||
|
that match the pathspec are affected.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-d::
|
||||||
|
Normally, when no <pathspec> is specified, git clean will not
|
||||||
|
recurse into untracked directories to avoid removing too much.
|
||||||
|
Specify -d to have it recurse into such directories as well.
|
||||||
|
If a <pathspec> is specified, -d is irrelevant; all untracked
|
||||||
|
files matching the specified paths (with exceptions for nested
|
||||||
|
git directories mentioned under `--force`) will be removed.
|
||||||
|
|
||||||
|
-f::
|
||||||
|
--force::
|
||||||
|
If the Git configuration variable clean.requireForce is not set
|
||||||
|
to false, 'git clean' will refuse to delete files or directories
|
||||||
|
unless given -f. Git will refuse to modify untracked
|
||||||
|
nested git repositories (directories with a .git subdirectory)
|
||||||
|
unless a second -f is given.
|
||||||
|
|
||||||
|
-i::
|
||||||
|
--interactive::
|
||||||
|
Show what would be done and clean files interactively. See
|
||||||
|
``Interactive mode'' for details.
|
||||||
|
Configuration variable `clean.requireForce` is ignored, as
|
||||||
|
this mode gives its own safety protection by going interactive.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
--dry-run::
|
||||||
|
Don't actually remove anything, just show what would be done.
|
||||||
|
Configuration variable `clean.requireForce` is ignored, as
|
||||||
|
nothing will be deleted anyway.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Be quiet, only report errors, but not the files that are
|
||||||
|
successfully removed.
|
||||||
|
|
||||||
|
-e <pattern>::
|
||||||
|
--exclude=<pattern>::
|
||||||
|
Use the given exclude pattern in addition to the standard ignore rules
|
||||||
|
(see linkgit:gitignore[5]).
|
||||||
|
|
||||||
|
-x::
|
||||||
|
Don't use the standard ignore rules (see linkgit:gitignore[5]), but
|
||||||
|
still use the ignore rules given with `-e` options from the command
|
||||||
|
line. This allows removing all untracked
|
||||||
|
files, including build products. This can be used (possibly in
|
||||||
|
conjunction with 'git restore' or 'git reset') to create a pristine
|
||||||
|
working directory to test a clean build.
|
||||||
|
|
||||||
|
-X::
|
||||||
|
Remove only files ignored by Git. This may be useful to rebuild
|
||||||
|
everything from scratch, but keep manually created files.
|
||||||
|
|
||||||
|
Interactive mode
|
||||||
|
----------------
|
||||||
|
When the command enters the interactive mode, it shows the
|
||||||
|
files and directories to be cleaned, and goes into its
|
||||||
|
interactive command loop.
|
||||||
|
|
||||||
|
The command loop shows the list of subcommands available, and
|
||||||
|
gives a prompt "What now> ". In general, when the prompt ends
|
||||||
|
with a single '>', you can pick only one of the choices given
|
||||||
|
and type return, like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
*** Commands ***
|
||||||
|
1: clean 2: filter by pattern 3: select by numbers
|
||||||
|
4: ask each 5: quit 6: help
|
||||||
|
What now> 1
|
||||||
|
------------
|
||||||
|
|
||||||
|
You also could say `c` or `clean` above as long as the choice is unique.
|
||||||
|
|
||||||
|
The main command loop has 6 subcommands.
|
||||||
|
|
||||||
|
clean::
|
||||||
|
|
||||||
|
Start cleaning files and directories, and then quit.
|
||||||
|
|
||||||
|
filter by pattern::
|
||||||
|
|
||||||
|
This shows the files and directories to be deleted and issues an
|
||||||
|
"Input ignore patterns>>" prompt. You can input space-separated
|
||||||
|
patterns to exclude files and directories from deletion.
|
||||||
|
E.g. "*.c *.h" will exclude files ending with ".c" and ".h" from
|
||||||
|
deletion. When you are satisfied with the filtered result, press
|
||||||
|
ENTER (empty) back to the main menu.
|
||||||
|
|
||||||
|
select by numbers::
|
||||||
|
|
||||||
|
This shows the files and directories to be deleted and issues an
|
||||||
|
"Select items to delete>>" prompt. When the prompt ends with double
|
||||||
|
'>>' like this, you can make more than one selection, concatenated
|
||||||
|
with whitespace or comma. Also you can say ranges. E.g. "2-5 7,9"
|
||||||
|
to choose 2,3,4,5,7,9 from the list. If the second number in a
|
||||||
|
range is omitted, all remaining items are selected. E.g. "7-" to
|
||||||
|
choose 7,8,9 from the list. You can say '*' to choose everything.
|
||||||
|
Also when you are satisfied with the filtered result, press ENTER
|
||||||
|
(empty) back to the main menu.
|
||||||
|
|
||||||
|
ask each::
|
||||||
|
|
||||||
|
This will start to clean, and you must confirm one by one in order
|
||||||
|
to delete items. Please note that this action is not as efficient
|
||||||
|
as the above two actions.
|
||||||
|
|
||||||
|
quit::
|
||||||
|
|
||||||
|
This lets you quit without doing any cleaning.
|
||||||
|
|
||||||
|
help::
|
||||||
|
|
||||||
|
Show brief usage of interactive git-clean.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/clean.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:gitignore[5]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
439
app/src/main/assets/manpages/git-clone.txt
Normal file
439
app/src/main/assets/manpages/git-clone.txt
Normal file
@@ -0,0 +1,439 @@
|
|||||||
|
git-clone(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-clone - Clone a repository into a new directory
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git clone [--template=<template-directory>]
|
||||||
|
[-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
|
||||||
|
[-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
|
||||||
|
[--dissociate] [--separate-git-dir <git-dir>]
|
||||||
|
[--depth <depth>] [--[no-]single-branch] [--[no-]tags]
|
||||||
|
[--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
|
||||||
|
[--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
|
||||||
|
[--filter=<filter-spec> [--also-filter-submodules]] [--] <repository>
|
||||||
|
[<directory>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Clones a repository into a newly created directory, creates
|
||||||
|
remote-tracking branches for each branch in the cloned repository
|
||||||
|
(visible using `git branch --remotes`), and creates and checks out an
|
||||||
|
initial branch that is forked from the cloned repository's
|
||||||
|
currently active branch.
|
||||||
|
|
||||||
|
After the clone, a plain `git fetch` without arguments will update
|
||||||
|
all the remote-tracking branches, and a `git pull` without
|
||||||
|
arguments will in addition merge the remote master branch into the
|
||||||
|
current master branch, if any (this is untrue when `--single-branch`
|
||||||
|
is given; see below).
|
||||||
|
|
||||||
|
This default configuration is achieved by creating references to
|
||||||
|
the remote branch heads under `refs/remotes/origin` and
|
||||||
|
by initializing `remote.origin.url` and `remote.origin.fetch`
|
||||||
|
configuration variables.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`-l`::
|
||||||
|
`--local`::
|
||||||
|
When the repository to clone from is on a local machine,
|
||||||
|
this flag bypasses the normal "Git aware" transport
|
||||||
|
mechanism and clones the repository by making a copy of
|
||||||
|
`HEAD` and everything under objects and refs directories.
|
||||||
|
The files under `.git/objects/` directory are hardlinked
|
||||||
|
to save space when possible.
|
||||||
|
+
|
||||||
|
If the repository is specified as a local path (e.g., `/path/to/repo`),
|
||||||
|
this is the default, and `--local` is essentially a no-op. If the
|
||||||
|
repository is specified as a URL, then this flag is ignored (and we
|
||||||
|
never use the local optimizations). Specifying `--no-local` will
|
||||||
|
override the default when `/path/to/repo` is given, using the regular
|
||||||
|
Git transport instead.
|
||||||
|
+
|
||||||
|
If the repository's `$GIT_DIR/objects` has symbolic links or is a
|
||||||
|
symbolic link, the clone will fail. This is a security measure to
|
||||||
|
prevent the unintentional copying of files by dereferencing the symbolic
|
||||||
|
links.
|
||||||
|
+
|
||||||
|
This option does not work with repositories owned by other users for security
|
||||||
|
reasons, and `--no-local` must be specified for the clone to succeed.
|
||||||
|
+
|
||||||
|
*NOTE*: this operation can race with concurrent modification to the
|
||||||
|
source repository, similar to running `cp -r <src> <dst>` while modifying
|
||||||
|
_<src>_.
|
||||||
|
|
||||||
|
`--no-hardlinks`::
|
||||||
|
Force the cloning process from a repository on a local
|
||||||
|
filesystem to copy the files under the `.git/objects`
|
||||||
|
directory instead of using hardlinks. This may be desirable
|
||||||
|
if you are trying to make a back-up of your repository.
|
||||||
|
|
||||||
|
`-s`::
|
||||||
|
`--shared`::
|
||||||
|
When the repository to clone is on the local machine,
|
||||||
|
instead of using hard links, automatically setup
|
||||||
|
`.git/objects/info/alternates` to share the objects
|
||||||
|
with the source repository. The resulting repository
|
||||||
|
starts out without any object of its own.
|
||||||
|
+
|
||||||
|
NOTE: this is a possibly dangerous operation; do *not* use
|
||||||
|
it unless you understand what it does. If you clone your
|
||||||
|
repository using this option and then delete branches (or use any
|
||||||
|
other Git command that makes any existing commit unreferenced) in the
|
||||||
|
source repository, some objects may become unreferenced (or dangling).
|
||||||
|
These objects may be removed by normal Git operations (such as `git commit`)
|
||||||
|
which automatically call `git maintenance run --auto`. (See
|
||||||
|
linkgit:git-maintenance[1].) If these objects are removed and were referenced
|
||||||
|
by the cloned repository, then the cloned repository will become corrupt.
|
||||||
|
+
|
||||||
|
Note that running `git repack` without the `--local` option in a repository
|
||||||
|
cloned with `--shared` will copy objects from the source repository into a pack
|
||||||
|
in the cloned repository, removing the disk space savings of `clone --shared`.
|
||||||
|
It is safe, however, to run `git gc`, which uses the `--local` option by
|
||||||
|
default.
|
||||||
|
+
|
||||||
|
If you want to break the dependency of a repository cloned with `--shared` on
|
||||||
|
its source repository, you can simply run `git repack -a` to copy all
|
||||||
|
objects from the source repository into a pack in the cloned repository.
|
||||||
|
|
||||||
|
`--reference=<repository>`::
|
||||||
|
`--reference-if-able=<repository>`::
|
||||||
|
If the reference _<repository>_ is on the local machine,
|
||||||
|
automatically setup `.git/objects/info/alternates` to
|
||||||
|
obtain objects from the reference _<repository>_. Using
|
||||||
|
an already existing repository as an alternate will
|
||||||
|
require fewer objects to be copied from the repository
|
||||||
|
being cloned, reducing network and local storage costs.
|
||||||
|
When using the `--reference-if-able`, a non existing
|
||||||
|
directory is skipped with a warning instead of aborting
|
||||||
|
the clone.
|
||||||
|
+
|
||||||
|
NOTE: see the NOTE for the `--shared` option, and also the
|
||||||
|
`--dissociate` option.
|
||||||
|
|
||||||
|
`--dissociate`::
|
||||||
|
Borrow the objects from reference repositories specified
|
||||||
|
with the `--reference` options only to reduce network
|
||||||
|
transfer, and stop borrowing from them after a clone is made
|
||||||
|
by making necessary local copies of borrowed objects. This
|
||||||
|
option can also be used when cloning locally from a
|
||||||
|
repository that already borrows objects from another
|
||||||
|
repository--the new repository will borrow objects from the
|
||||||
|
same repository, and this option can be used to stop the
|
||||||
|
borrowing.
|
||||||
|
|
||||||
|
`-q`::
|
||||||
|
`--quiet`::
|
||||||
|
Operate quietly. Progress is not reported to the standard
|
||||||
|
error stream.
|
||||||
|
|
||||||
|
`-v`::
|
||||||
|
`--verbose`::
|
||||||
|
Run verbosely. Does not affect the reporting of progress status
|
||||||
|
to the standard error stream.
|
||||||
|
|
||||||
|
`--progress`::
|
||||||
|
Report progress status on the standard error stream
|
||||||
|
by default when attached to a terminal, unless `--quiet`
|
||||||
|
is specified. This flag forces progress status even if the
|
||||||
|
standard error stream is not directed to a terminal.
|
||||||
|
|
||||||
|
`--server-option=<option>`::
|
||||||
|
Transmit the given string to the server when communicating using
|
||||||
|
protocol version 2. The given string must not contain a _NUL_ or _LF_
|
||||||
|
character. The server's handling of server options, including
|
||||||
|
unknown ones, is server-specific.
|
||||||
|
When multiple `--server-option=<option>` are given, they are all
|
||||||
|
sent to the other side in the order listed on the command line.
|
||||||
|
When no `--server-option=<option>` is given from the command
|
||||||
|
line, the values of configuration variable `remote.<name>.serverOption`
|
||||||
|
are used instead.
|
||||||
|
|
||||||
|
`-n`::
|
||||||
|
`--no-checkout`::
|
||||||
|
Do not checkout `HEAD` after the clone is complete.
|
||||||
|
|
||||||
|
`--no-reject-shallow`::
|
||||||
|
`--reject-shallow`::
|
||||||
|
Fail if the source repository is a shallow repository.
|
||||||
|
The `clone.rejectShallow` configuration variable can be used to
|
||||||
|
specify the default.
|
||||||
|
|
||||||
|
`--bare`::
|
||||||
|
Make a 'bare' Git repository. That is, instead of
|
||||||
|
creating _<directory>_ and placing the administrative
|
||||||
|
files in `<directory>/.git`, make the _<directory>_
|
||||||
|
itself the `$GIT_DIR`. This obviously implies the `--no-checkout`
|
||||||
|
because there is nowhere to check out the working tree.
|
||||||
|
Also the branch heads at the remote are copied directly
|
||||||
|
to corresponding local branch heads, without mapping
|
||||||
|
them to `refs/remotes/origin/`. When this option is
|
||||||
|
used, neither remote-tracking branches nor the related
|
||||||
|
configuration variables are created.
|
||||||
|
|
||||||
|
`--sparse`::
|
||||||
|
Employ a sparse-checkout, with only files in the toplevel
|
||||||
|
directory initially being present. The
|
||||||
|
linkgit:git-sparse-checkout[1] command can be used to grow the
|
||||||
|
working directory as needed.
|
||||||
|
|
||||||
|
`--filter=<filter-spec>`::
|
||||||
|
Use the partial clone feature and request that the server sends
|
||||||
|
a subset of reachable objects according to a given object filter.
|
||||||
|
When using `--filter`, the supplied _<filter-spec>_ is used for
|
||||||
|
the partial clone filter.
|
||||||
|
+
|
||||||
|
If `--filter=auto` is used the filter specification is determined
|
||||||
|
automatically through the 'promisor-remote' protocol (see
|
||||||
|
linkgit:gitprotocol-v2[5]) by combining the filter specifications
|
||||||
|
advertised by the server for the promisor remotes that the client
|
||||||
|
accepts (see the `promisor.acceptFromServer` configuration option in
|
||||||
|
linkgit:git-config[1]). This allows the server to suggest the optimal
|
||||||
|
filter for the available promisor remotes.
|
||||||
|
+
|
||||||
|
As with other filter specifications, the "auto" value is persisted in
|
||||||
|
the configuration. This ensures that future fetches will continue to
|
||||||
|
adapt to the server's current recommendation.
|
||||||
|
+
|
||||||
|
For details on all other available filter specifications, see the
|
||||||
|
`--filter=<filter-spec>` option in linkgit:git-rev-list[1].
|
||||||
|
+
|
||||||
|
For example, `--filter=blob:none` will filter out all blobs (file
|
||||||
|
contents) until needed by Git. Also, `--filter=blob:limit=<size>` will
|
||||||
|
filter out all blobs of size at least _<size>_.
|
||||||
|
|
||||||
|
`--also-filter-submodules`::
|
||||||
|
Also apply the partial clone filter to any submodules in the repository.
|
||||||
|
Requires `--filter` and `--recurse-submodules`. This can be turned on by
|
||||||
|
default by setting the `clone.filterSubmodules` config option.
|
||||||
|
|
||||||
|
`--mirror`::
|
||||||
|
Set up a mirror of the source repository. This implies `--bare`.
|
||||||
|
Compared to `--bare`, `--mirror` not only maps local branches of the
|
||||||
|
source to local branches of the target, it maps all refs (including
|
||||||
|
remote-tracking branches, notes etc.) and sets up a refspec configuration such
|
||||||
|
that all these refs are overwritten by a `git remote update` in the
|
||||||
|
target repository.
|
||||||
|
|
||||||
|
`-o<name>`::
|
||||||
|
`--origin=<name>`::
|
||||||
|
Instead of using the remote name `origin` to keep track of the upstream
|
||||||
|
repository, use _<name>_. Overrides `clone.defaultRemoteName` from the
|
||||||
|
config.
|
||||||
|
|
||||||
|
`-b<name>`::
|
||||||
|
`--branch=<name>`::
|
||||||
|
Point the newly created `HEAD` to _<name>_ branch instead of the branch
|
||||||
|
pointed to by the cloned repository's `HEAD`. In a non-bare repository,
|
||||||
|
this is the branch that will be checked out.
|
||||||
|
`--branch` can also take tags and detaches the `HEAD` at that commit
|
||||||
|
in the resulting repository.
|
||||||
|
|
||||||
|
`--revision=<rev>`::
|
||||||
|
Create a new repository, and fetch the history leading to the given
|
||||||
|
revision _<rev>_ (and nothing else), without making any remote-tracking
|
||||||
|
branch, and without making any local branch, and detach `HEAD` to
|
||||||
|
_<rev>_. The argument can be a ref name (e.g. `refs/heads/main` or
|
||||||
|
`refs/tags/v1.0`) that peels down to a commit, or a hexadecimal object
|
||||||
|
name.
|
||||||
|
This option is incompatible with `--branch` and `--mirror`.
|
||||||
|
|
||||||
|
`-u<upload-pack>`::
|
||||||
|
`--upload-pack=<upload-pack>`::
|
||||||
|
Specify a non-default path for the command run on the other end when the
|
||||||
|
repository to clone from is accessed via ssh.
|
||||||
|
|
||||||
|
`--template=<template-directory>`::
|
||||||
|
Specify the directory from which templates will be used;
|
||||||
|
(See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
|
||||||
|
|
||||||
|
`-c<key>=<value>`::
|
||||||
|
`--config=<key>=<value>`::
|
||||||
|
Set a configuration variable in the newly-created repository;
|
||||||
|
this takes effect immediately after the repository is
|
||||||
|
initialized, but before the remote history is fetched or any
|
||||||
|
files checked out. The _<key>_ is in the same format as expected by
|
||||||
|
linkgit:git-config[1] (e.g., `core.eol=true`). If multiple
|
||||||
|
values are given for the same key, each value will be written to
|
||||||
|
the config file. This makes it safe, for example, to add
|
||||||
|
additional fetch refspecs to the origin remote.
|
||||||
|
+
|
||||||
|
Due to limitations of the current implementation, some configuration
|
||||||
|
variables do not take effect until after the initial fetch and checkout.
|
||||||
|
Configuration variables known to not take effect are:
|
||||||
|
`remote.<name>.mirror` and `remote.<name>.tagOpt`. Use the
|
||||||
|
corresponding `--mirror` and `--no-tags` options instead.
|
||||||
|
|
||||||
|
`--depth=<depth>`::
|
||||||
|
Create a 'shallow' clone with a history truncated to the
|
||||||
|
specified number of commits. Implies `--single-branch` unless
|
||||||
|
`--no-single-branch` is given to fetch the histories near the
|
||||||
|
tips of all branches. If you want to clone submodules shallowly,
|
||||||
|
also pass `--shallow-submodules`.
|
||||||
|
|
||||||
|
`--shallow-since=<date>`::
|
||||||
|
Create a shallow clone with a history after the specified time.
|
||||||
|
|
||||||
|
`--shallow-exclude=<ref>`::
|
||||||
|
Create a shallow clone with a history, excluding commits
|
||||||
|
reachable from a specified remote branch or tag. This option
|
||||||
|
can be specified multiple times.
|
||||||
|
|
||||||
|
`--single-branch`::
|
||||||
|
`--no-single-branch`::
|
||||||
|
Clone only the history leading to the tip of a single branch,
|
||||||
|
either specified by the `--branch` option or the primary
|
||||||
|
branch remote's `HEAD` points at.
|
||||||
|
Further fetches into the resulting repository will only update the
|
||||||
|
remote-tracking branch for the branch this option was used for the
|
||||||
|
initial cloning. If the `HEAD` at the remote did not point at any
|
||||||
|
branch when `--single-branch` clone was made, no remote-tracking
|
||||||
|
branch is created.
|
||||||
|
|
||||||
|
`--tags`::
|
||||||
|
`--no-tags`::
|
||||||
|
Control whether or not tags will be cloned. When `--no-tags` is
|
||||||
|
given, the option will be become permanent by setting the
|
||||||
|
`remote.<remote>.tagOpt=--no-tags` configuration. This ensures that
|
||||||
|
future `git pull` and `git fetch` won't follow any tags. Subsequent
|
||||||
|
explicit tag fetches will still work (see linkgit:git-fetch[1]).
|
||||||
|
+
|
||||||
|
By default, tags are cloned and passing `--tags` is thus typically a
|
||||||
|
no-op, unless it cancels out a previous `--no-tags`.
|
||||||
|
+
|
||||||
|
Can be used in conjunction with `--single-branch` to clone and
|
||||||
|
maintain a branch with no references other than a single cloned
|
||||||
|
branch. This is useful e.g. to maintain minimal clones of the default
|
||||||
|
branch of some repository for search indexing.
|
||||||
|
|
||||||
|
`--recurse-submodules[=<pathspec>]`::
|
||||||
|
After the clone is created, initialize and clone submodules
|
||||||
|
within based on the provided _<pathspec>_. If no `=<pathspec>` is
|
||||||
|
provided, all submodules are initialized and cloned.
|
||||||
|
This option can be given multiple times for pathspecs consisting
|
||||||
|
of multiple entries. The resulting clone has `submodule.active` set to
|
||||||
|
the provided pathspec, or "`.`" (meaning all submodules) if no
|
||||||
|
pathspec is provided.
|
||||||
|
+
|
||||||
|
Submodules are initialized and cloned using their default settings. This is
|
||||||
|
equivalent to running
|
||||||
|
`git submodule update --init --recursive <pathspec>` immediately after
|
||||||
|
the clone is finished. This option is ignored if the cloned repository does
|
||||||
|
not have a worktree/checkout (i.e. if any of `--no-checkout`/`-n`, `--bare`,
|
||||||
|
or `--mirror` is given)
|
||||||
|
|
||||||
|
`--shallow-submodules`::
|
||||||
|
`--no-shallow-submodules`::
|
||||||
|
All submodules which are cloned will be shallow with a depth of 1.
|
||||||
|
|
||||||
|
`--remote-submodules`::
|
||||||
|
`--no-remote-submodules`::
|
||||||
|
All submodules which are cloned will use the status of the submodule's
|
||||||
|
remote-tracking branch to update the submodule, rather than the
|
||||||
|
superproject's recorded SHA-1. Equivalent to passing `--remote` to
|
||||||
|
`git submodule update`.
|
||||||
|
|
||||||
|
`--separate-git-dir=<git-dir>`::
|
||||||
|
Instead of placing the cloned repository where it is supposed
|
||||||
|
to be, place the cloned repository at the specified directory,
|
||||||
|
then make a filesystem-agnostic Git symbolic link to there.
|
||||||
|
The result is Git repository can be separated from working
|
||||||
|
tree.
|
||||||
|
|
||||||
|
`--ref-format=<ref-format>`::
|
||||||
|
|
||||||
|
Specify the given ref storage format for the repository. The valid values are:
|
||||||
|
+
|
||||||
|
include::ref-storage-format.adoc[]
|
||||||
|
|
||||||
|
`-j<n>`::
|
||||||
|
`--jobs=<n>`::
|
||||||
|
The number of submodules fetched at the same time.
|
||||||
|
Defaults to the `submodule.fetchJobs` option.
|
||||||
|
|
||||||
|
_<repository>_::
|
||||||
|
The (possibly remote) _<repository>_ to clone from. See the
|
||||||
|
<<URLS,GIT URLS>> section below for more information on specifying
|
||||||
|
repositories.
|
||||||
|
|
||||||
|
_<directory>_::
|
||||||
|
The name of a new directory to clone into. The "humanish"
|
||||||
|
part of the source repository is used if no _<directory>_ is
|
||||||
|
explicitly given (`repo` for `/path/to/repo.git` and `foo`
|
||||||
|
for `host.xz:foo/.git`). Cloning into an existing directory
|
||||||
|
is only allowed if the directory is empty.
|
||||||
|
|
||||||
|
`--bundle-uri=<uri>`::
|
||||||
|
Before fetching from the remote, fetch a bundle from the given
|
||||||
|
_<uri>_ and unbundle the data into the local repository. The refs
|
||||||
|
in the bundle will be stored under the hidden `refs/bundle/*`
|
||||||
|
namespace. This option is incompatible with `--depth`,
|
||||||
|
`--shallow-since`, and `--shallow-exclude`.
|
||||||
|
|
||||||
|
:git-clone: 1
|
||||||
|
include::urls.adoc[]
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Clone from upstream:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone git://git.kernel.org/pub/scm/.../linux.git my-linux
|
||||||
|
$ cd my-linux
|
||||||
|
$ make
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
* Make a local clone that borrows from the current directory, without checking things out:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone -l -s -n . ../copy
|
||||||
|
$ cd ../copy
|
||||||
|
$ git show-branch
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
* Clone from upstream while borrowing from an existing local directory:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone --reference /git/linux.git \
|
||||||
|
git://git.kernel.org/pub/scm/.../linux.git \
|
||||||
|
my-linux
|
||||||
|
$ cd my-linux
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
* Create a bare repository to publish your changes to the public:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Clone a local repository from a different user:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git clone --no-local /home/otheruser/proj.git /pub/scm/proj.git
|
||||||
|
------------
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/init.adoc[]
|
||||||
|
|
||||||
|
include::config/clone.adoc[]
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
89
app/src/main/assets/manpages/git-column.txt
Normal file
89
app/src/main/assets/manpages/git-column.txt
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
git-column(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-column - Display data in columns
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git column' [--command=<name>] [--[raw-]mode=<mode>] [--width=<width>]
|
||||||
|
[--indent=<string>] [--nl=<string>] [--padding=<n>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This command formats the lines of its standard input into a table with
|
||||||
|
multiple columns. Each input line occupies one cell of the table. It
|
||||||
|
is used internally by other git commands to format output into
|
||||||
|
columns.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--command=<name>::
|
||||||
|
Look up layout mode using configuration variable column.<name> and
|
||||||
|
column.ui.
|
||||||
|
|
||||||
|
--mode=<mode>::
|
||||||
|
Specify layout mode. See configuration variable column.ui for option
|
||||||
|
syntax in linkgit:git-config[1].
|
||||||
|
|
||||||
|
--raw-mode=<n>::
|
||||||
|
Same as --mode but take mode encoded as a number. This is mainly used
|
||||||
|
by other commands that have already parsed layout mode.
|
||||||
|
|
||||||
|
--width=<width>::
|
||||||
|
Specify the terminal width. By default 'git column' will detect the
|
||||||
|
terminal width, or fall back to 80 if it is unable to do so.
|
||||||
|
|
||||||
|
--indent=<string>::
|
||||||
|
String to be printed at the beginning of each line.
|
||||||
|
|
||||||
|
--nl=<string>::
|
||||||
|
String to be printed at the end of each line,
|
||||||
|
including newline character.
|
||||||
|
|
||||||
|
--padding=<N>::
|
||||||
|
The number of spaces between columns. One space by default.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Format data by columns:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ seq 1 24 | git column --mode=column --padding=5
|
||||||
|
1 4 7 10 13 16 19 22
|
||||||
|
2 5 8 11 14 17 20 23
|
||||||
|
3 6 9 12 15 18 21 24
|
||||||
|
------------
|
||||||
|
|
||||||
|
Format data by rows:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ seq 1 21 | git column --mode=row --padding=5
|
||||||
|
1 2 3 4 5 6 7
|
||||||
|
8 9 10 11 12 13 14
|
||||||
|
15 16 17 18 19 20 21
|
||||||
|
------------
|
||||||
|
|
||||||
|
List some tags in a table with unequal column widths:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git tag --list 'v2.4.*' --column=row,dense
|
||||||
|
v2.4.0 v2.4.0-rc0 v2.4.0-rc1 v2.4.0-rc2 v2.4.0-rc3
|
||||||
|
v2.4.1 v2.4.10 v2.4.11 v2.4.12 v2.4.2
|
||||||
|
v2.4.3 v2.4.4 v2.4.5 v2.4.6 v2.4.7
|
||||||
|
v2.4.8 v2.4.9
|
||||||
|
------------
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/column.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
164
app/src/main/assets/manpages/git-commit-graph.txt
Normal file
164
app/src/main/assets/manpages/git-commit-graph.txt
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
git-commit-graph(1)
|
||||||
|
===================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-commit-graph - Write and verify Git commit-graph files
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
|
||||||
|
'git commit-graph write' [--object-dir <dir>] [--append]
|
||||||
|
[--split[=<strategy>]] [--reachable | --stdin-packs | --stdin-commits]
|
||||||
|
[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress]
|
||||||
|
<split-options>
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Manage the serialized commit-graph file.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--object-dir::
|
||||||
|
Use given directory for the location of packfiles and commit-graph
|
||||||
|
file. This parameter exists to specify the location of an alternate
|
||||||
|
that only has the objects directory, not a full `.git` directory. The
|
||||||
|
commit-graph file is expected to be in the `<dir>/info` directory and
|
||||||
|
the packfiles are expected to be in `<dir>/pack`. If the directory
|
||||||
|
could not be made into an absolute path, or does not match any known
|
||||||
|
object directory, `git commit-graph ...` will exit with non-zero
|
||||||
|
status.
|
||||||
|
|
||||||
|
--progress::
|
||||||
|
--no-progress::
|
||||||
|
Turn progress on/off explicitly. If neither is specified, progress is
|
||||||
|
shown if standard error is connected to a terminal.
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
--------
|
||||||
|
'write'::
|
||||||
|
|
||||||
|
Write a commit-graph file based on the commits found in packfiles. If
|
||||||
|
the config option `core.commitGraph` is disabled, then this command will
|
||||||
|
output a warning, then return success without writing a commit-graph file.
|
||||||
|
+
|
||||||
|
With the `--stdin-packs` option, generate the new commit graph by
|
||||||
|
walking objects only in the specified pack-indexes. (Cannot be combined
|
||||||
|
with `--stdin-commits` or `--reachable`.)
|
||||||
|
+
|
||||||
|
With the `--stdin-commits` option, generate the new commit graph by
|
||||||
|
walking commits starting at the commits specified in stdin as a list
|
||||||
|
of OIDs in hex, one OID per line. OIDs that resolve to non-commits
|
||||||
|
(either directly, or by peeling tags) are silently ignored. OIDs that
|
||||||
|
are malformed, or do not exist generate an error. (Cannot be combined
|
||||||
|
with `--stdin-packs` or `--reachable`.)
|
||||||
|
+
|
||||||
|
With the `--reachable` option, generate the new commit graph by walking
|
||||||
|
commits starting at all refs. (Cannot be combined with `--stdin-commits`
|
||||||
|
or `--stdin-packs`.)
|
||||||
|
+
|
||||||
|
With the `--append` option, include all commits that are present in the
|
||||||
|
existing commit-graph file.
|
||||||
|
+
|
||||||
|
With the `--changed-paths` option, compute and write information about the
|
||||||
|
paths changed between a commit and its first parent. This operation can
|
||||||
|
take a while on large repositories. It provides significant performance gains
|
||||||
|
for getting history of a directory or a file with `git log -- <path>`. If
|
||||||
|
this option is given, future commit-graph writes will automatically assume
|
||||||
|
that this option was intended. Use `--no-changed-paths` to stop storing this
|
||||||
|
data. `--changed-paths` is implied by config `commitGraph.changedPaths=true`.
|
||||||
|
+
|
||||||
|
With the `--max-new-filters=<n>` option, generate at most `n` new Bloom
|
||||||
|
filters (if `--changed-paths` is specified). If `n` is `-1`, no limit is
|
||||||
|
enforced. Only commits present in the new layer count against this
|
||||||
|
limit. To retroactively compute Bloom filters over earlier layers, it is
|
||||||
|
advised to use `--split=replace`. Overrides the `commitGraph.maxNewFilters`
|
||||||
|
configuration.
|
||||||
|
+
|
||||||
|
With the `--split[=<strategy>]` option, write the commit-graph as a
|
||||||
|
chain of multiple commit-graph files stored in
|
||||||
|
`<dir>/info/commit-graphs`. Commit-graph layers are merged based on the
|
||||||
|
strategy and other splitting options. The new commits not already in the
|
||||||
|
commit-graph are added in a new "tip" file. This file is merged with the
|
||||||
|
existing file if the following merge conditions are met:
|
||||||
|
+
|
||||||
|
* If `--split=no-merge` is specified, a merge is never performed, and
|
||||||
|
the remaining options are ignored. `--split=replace` overwrites the
|
||||||
|
existing chain with a new one. A bare `--split` defers to the remaining
|
||||||
|
options. (Note that merging a chain of commit graphs replaces the
|
||||||
|
existing chain with a length-1 chain where the first and only
|
||||||
|
incremental holds the entire graph).
|
||||||
|
+
|
||||||
|
* If `--size-multiple=<X>` is not specified, let `X` equal 2. If the new
|
||||||
|
tip file would have `N` commits and the previous tip has `M` commits and
|
||||||
|
`X` times `N` is greater than `M`, instead merge the two files into a
|
||||||
|
single file.
|
||||||
|
+
|
||||||
|
* If `--max-commits=<M>` is specified with `M` a positive integer, and the
|
||||||
|
new tip file would have more than `M` commits, then instead merge the new
|
||||||
|
tip with the previous tip.
|
||||||
|
+
|
||||||
|
Finally, if `--expire-time=<datetime>` is not specified, let `datetime`
|
||||||
|
be the current time. After writing the split commit-graph, delete all
|
||||||
|
unused commit-graph whose modified times are older than `datetime`.
|
||||||
|
|
||||||
|
'verify'::
|
||||||
|
|
||||||
|
Read the commit-graph file and verify its contents against the object
|
||||||
|
database. Used to check for corrupted data.
|
||||||
|
+
|
||||||
|
With the `--shallow` option, only check the tip commit-graph file in
|
||||||
|
a chain of split commit-graphs.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Write a commit-graph file for the packed commits in your local `.git`
|
||||||
|
directory.
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git commit-graph write
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Write a commit-graph file, extending the current commit-graph file
|
||||||
|
using commits in `<pack-index>`.
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ echo <pack-index> | git commit-graph write --stdin-packs
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Write a commit-graph file containing all reachable commits.
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git show-ref -s | git commit-graph write --stdin-commits
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Write a commit-graph file containing all commits in the current
|
||||||
|
commit-graph file along with those reachable from `HEAD`.
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git rev-parse HEAD | git commit-graph write --stdin-commits --append
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/commitgraph.adoc[]
|
||||||
|
|
||||||
|
|
||||||
|
FILE FORMAT
|
||||||
|
-----------
|
||||||
|
|
||||||
|
see linkgit:gitformat-commit-graph[5].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
101
app/src/main/assets/manpages/git-commit-tree.txt
Normal file
101
app/src/main/assets/manpages/git-commit-tree.txt
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
git-commit-tree(1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-commit-tree - Create a new commit object
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git commit-tree' <tree> [(-p <parent>)...]
|
||||||
|
'git commit-tree' [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...]
|
||||||
|
[(-F <file>)...] <tree>
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This is usually not what an end user wants to run directly. See
|
||||||
|
linkgit:git-commit[1] instead.
|
||||||
|
|
||||||
|
Creates a new commit object based on the provided tree object and
|
||||||
|
emits the new commit object id on stdout. The log message is read
|
||||||
|
from the standard input, unless `-m` or `-F` options are given.
|
||||||
|
|
||||||
|
The `-m` and `-F` options can be given any number of times, in any
|
||||||
|
order. The commit log message will be composed in the order in which
|
||||||
|
the options are given.
|
||||||
|
|
||||||
|
A commit object may have any number of parents. With exactly one
|
||||||
|
parent, it is an ordinary commit. Having more than one parent makes
|
||||||
|
the commit a merge between several lines of history. Initial (root)
|
||||||
|
commits have no parents.
|
||||||
|
|
||||||
|
While a tree represents a particular directory state of a working
|
||||||
|
directory, a commit represents that state in "time", and explains how
|
||||||
|
to get there.
|
||||||
|
|
||||||
|
Normally a commit would identify a new "HEAD" state, and while Git
|
||||||
|
doesn't care where you save the note about that state, in practice we
|
||||||
|
tend to just write the result to the file that is pointed at by
|
||||||
|
`.git/HEAD`, so that we can always see what the last committed
|
||||||
|
state was.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<tree>::
|
||||||
|
An existing tree object.
|
||||||
|
|
||||||
|
-p <parent>::
|
||||||
|
Each `-p` indicates the id of a parent commit object.
|
||||||
|
|
||||||
|
-m <message>::
|
||||||
|
A paragraph in the commit log message. This can be given more than
|
||||||
|
once and each <message> becomes its own paragraph.
|
||||||
|
|
||||||
|
-F <file>::
|
||||||
|
Read the commit log message from the given file. Use `-` to read
|
||||||
|
from the standard input. This can be given more than once and the
|
||||||
|
content of each file becomes its own paragraph.
|
||||||
|
|
||||||
|
-S[<keyid>]::
|
||||||
|
--gpg-sign[=<keyid>]::
|
||||||
|
--no-gpg-sign::
|
||||||
|
GPG-sign commits. The `keyid` argument is optional and
|
||||||
|
defaults to the committer identity; if specified, it must be
|
||||||
|
stuck to the option without a space. `--no-gpg-sign` is useful to
|
||||||
|
countermand a `--gpg-sign` option given earlier on the command line.
|
||||||
|
|
||||||
|
Commit Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
A commit encapsulates:
|
||||||
|
|
||||||
|
- all parent object ids
|
||||||
|
- author name, email and date
|
||||||
|
- committer name and email and the commit time.
|
||||||
|
|
||||||
|
A commit comment is read from stdin. If a changelog
|
||||||
|
entry is not provided via "<" redirection, 'git commit-tree' will just wait
|
||||||
|
for one to be entered and terminated with ^D.
|
||||||
|
|
||||||
|
include::date-formats.adoc[]
|
||||||
|
|
||||||
|
Discussion
|
||||||
|
----------
|
||||||
|
|
||||||
|
include::i18n.adoc[]
|
||||||
|
|
||||||
|
FILES
|
||||||
|
-----
|
||||||
|
/etc/mailname
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-write-tree[1]
|
||||||
|
linkgit:git-commit[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
595
app/src/main/assets/manpages/git-commit.txt
Normal file
595
app/src/main/assets/manpages/git-commit.txt
Normal file
@@ -0,0 +1,595 @@
|
|||||||
|
git-commit(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-commit - Record changes to the repository
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git commit [-a | --interactive | --patch] [-s] [-v] [-u[<mode>]] [--amend]
|
||||||
|
[--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>]
|
||||||
|
[-F <file> | -m <msg>] [--reset-author] [--allow-empty]
|
||||||
|
[--allow-empty-message] [--no-verify] [-e] [--author=<author>]
|
||||||
|
[--date=<date>] [--cleanup=<mode>] [--[no-]status]
|
||||||
|
[-i | -o] [--pathspec-from-file=<file> [--pathspec-file-nul]]
|
||||||
|
[(--trailer <token>[(=|:)<value>])...] [-S[<keyid>]]
|
||||||
|
[--] [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Create a new commit containing the current contents of the index and
|
||||||
|
the given log message describing the changes. The new commit is a
|
||||||
|
direct child of HEAD, usually the tip of the current branch, and the
|
||||||
|
branch is updated to point to it (unless no branch is associated with
|
||||||
|
the working tree, in which case `HEAD` is "detached" as described in
|
||||||
|
linkgit:git-checkout[1]).
|
||||||
|
|
||||||
|
The content to be committed can be specified in several ways:
|
||||||
|
|
||||||
|
1. by using linkgit:git-add[1] to incrementally "add" changes to the
|
||||||
|
index before using the `commit` command (Note: even modified files
|
||||||
|
must be "added");
|
||||||
|
|
||||||
|
2. by using linkgit:git-rm[1] to remove files from the working tree
|
||||||
|
and the index, again before using the `commit` command;
|
||||||
|
|
||||||
|
3. by listing files as arguments to the `commit` command
|
||||||
|
(without `--interactive` or `--patch` switch), in which
|
||||||
|
case the commit will ignore changes staged in the index, and instead
|
||||||
|
record the current content of the listed files (which must already
|
||||||
|
be known to Git);
|
||||||
|
|
||||||
|
4. by using the `-a` switch with the `commit` command to automatically
|
||||||
|
"add" changes from all known files (i.e. all files that are already
|
||||||
|
listed in the index) and to automatically "rm" files in the index
|
||||||
|
that have been removed from the working tree, and then perform the
|
||||||
|
actual commit;
|
||||||
|
|
||||||
|
5. by using the `--interactive` or `--patch` switches with the `commit` command
|
||||||
|
to decide one by one which files or hunks should be part of the commit
|
||||||
|
in addition to contents in the index,
|
||||||
|
before finalizing the operation. See the ``Interactive Mode'' section of
|
||||||
|
linkgit:git-add[1] to learn how to operate these modes.
|
||||||
|
|
||||||
|
The `--dry-run` option can be used to obtain a
|
||||||
|
summary of what is included by any of the above for the next
|
||||||
|
commit by giving the same set of parameters (options and paths).
|
||||||
|
|
||||||
|
If you make a commit and then find a mistake immediately after
|
||||||
|
that, you can recover from it with `git reset`.
|
||||||
|
|
||||||
|
:git-commit: 1
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`-a`::
|
||||||
|
`--all`::
|
||||||
|
Automatically stage files that have
|
||||||
|
been modified and deleted, but new files you have not
|
||||||
|
told Git about are not affected.
|
||||||
|
|
||||||
|
`-p`::
|
||||||
|
`--patch`::
|
||||||
|
Use the interactive patch selection interface to choose
|
||||||
|
which changes to commit. See linkgit:git-add[1] for
|
||||||
|
details.
|
||||||
|
|
||||||
|
include::diff-context-options.adoc[]
|
||||||
|
|
||||||
|
`-C <commit>`::
|
||||||
|
`--reuse-message=<commit>`::
|
||||||
|
Take an existing _<commit>_ object, and reuse the log message
|
||||||
|
and the authorship information (including the timestamp)
|
||||||
|
when creating the commit.
|
||||||
|
|
||||||
|
`-c <commit>`::
|
||||||
|
`--reedit-message=<commit>`::
|
||||||
|
Like `-C`, but with `-c` the editor is invoked, so that
|
||||||
|
the user can further edit the commit message.
|
||||||
|
|
||||||
|
`--fixup=[(amend|reword):]<commit>`::
|
||||||
|
Create a new commit which "fixes up" _<commit>_ when applied with
|
||||||
|
`git rebase --autosquash`. Plain `--fixup=<commit>` creates a
|
||||||
|
"fixup!" commit which changes the content of _<commit>_ but leaves
|
||||||
|
its log message untouched. `--fixup=amend:<commit>` is similar but
|
||||||
|
creates an "amend!" commit which also replaces the log message of
|
||||||
|
_<commit>_ with the log message of the "amend!" commit.
|
||||||
|
`--fixup=reword:<commit>` creates an "amend!" commit which
|
||||||
|
replaces the log message of _<commit>_ with its own log message
|
||||||
|
but makes no changes to the content of _<commit>_.
|
||||||
|
+
|
||||||
|
The commit created by plain `--fixup=<commit>` has a title
|
||||||
|
composed of "fixup!" followed by the title of _<commit>_,
|
||||||
|
and is recognized specially by `git rebase --autosquash`. The `-m`
|
||||||
|
option may be used to supplement the log message of the created
|
||||||
|
commit, but the additional commentary will be thrown away once the
|
||||||
|
"fixup!" commit is squashed into _<commit>_ by
|
||||||
|
`git rebase --autosquash`.
|
||||||
|
+
|
||||||
|
The commit created by `--fixup=amend:<commit>` is similar but its
|
||||||
|
title is instead prefixed with "amend!". The log message of
|
||||||
|
_<commit>_ is copied into the log message of the "amend!" commit and
|
||||||
|
opened in an editor so it can be refined. When `git rebase
|
||||||
|
--autosquash` squashes the "amend!" commit into _<commit>_, the
|
||||||
|
log message of _<commit>_ is replaced by the refined log message
|
||||||
|
from the "amend!" commit. It is an error for the "amend!" commit's
|
||||||
|
log message to be empty unless `--allow-empty-message` is
|
||||||
|
specified.
|
||||||
|
+
|
||||||
|
`--fixup=reword:<commit>` is shorthand for `--fixup=amend:<commit>
|
||||||
|
--only`. It creates an "amend!" commit with only a log message
|
||||||
|
(ignoring any changes staged in the index). When squashed by `git
|
||||||
|
rebase --autosquash`, it replaces the log message of _<commit>_
|
||||||
|
without making any other changes.
|
||||||
|
+
|
||||||
|
Neither "fixup!" nor "amend!" commits change authorship of
|
||||||
|
_<commit>_ when applied by `git rebase --autosquash`.
|
||||||
|
See linkgit:git-rebase[1] for details.
|
||||||
|
|
||||||
|
`--squash=<commit>`::
|
||||||
|
Construct a commit message for use with `git rebase --autosquash`.
|
||||||
|
The commit message title is taken from the specified
|
||||||
|
commit with a prefix of "squash! ". Can be used with additional
|
||||||
|
commit message options (`-m`/`-c`/`-C`/`-F`). See
|
||||||
|
linkgit:git-rebase[1] for details.
|
||||||
|
|
||||||
|
`--reset-author`::
|
||||||
|
When used with `-C`/`-c`/`--amend` options, or when committing after a
|
||||||
|
conflicting cherry-pick, declare that the authorship of the
|
||||||
|
resulting commit now belongs to the committer. This also renews
|
||||||
|
the author timestamp.
|
||||||
|
|
||||||
|
`--short`::
|
||||||
|
When doing a dry-run, give the output in the short-format. See
|
||||||
|
linkgit:git-status[1] for details. Implies `--dry-run`.
|
||||||
|
|
||||||
|
`--branch`::
|
||||||
|
Show the branch and tracking info even in short-format. See
|
||||||
|
linkgit:git-status[1] for details.
|
||||||
|
|
||||||
|
`--porcelain`::
|
||||||
|
When doing a dry-run, give the output in a porcelain-ready
|
||||||
|
format. See linkgit:git-status[1] for details. Implies
|
||||||
|
`--dry-run`.
|
||||||
|
|
||||||
|
`--long`::
|
||||||
|
When doing a dry-run, give the output in the long-format. This
|
||||||
|
is the default output of linkgit:git-status[1]. Implies
|
||||||
|
`--dry-run`.
|
||||||
|
|
||||||
|
`-z`::
|
||||||
|
`--null`::
|
||||||
|
When showing `short` or `porcelain` linkgit:git-status[1] output, print the
|
||||||
|
filename verbatim and terminate the entries with _NUL_, instead of _LF_.
|
||||||
|
If no format is given, implies the `--porcelain` output format.
|
||||||
|
Without the `-z` option, filenames with "unusual" characters are
|
||||||
|
quoted as explained for the configuration variable `core.quotePath`
|
||||||
|
(see linkgit:git-config[1]).
|
||||||
|
|
||||||
|
`-F <file>`::
|
||||||
|
`--file=<file>`::
|
||||||
|
Take the commit message from _<file>_. Use '-' to
|
||||||
|
read the message from the standard input.
|
||||||
|
|
||||||
|
`--author=<author>`::
|
||||||
|
Override the commit author. Specify an explicit author using the
|
||||||
|
standard `A U Thor <author@example.com>` format. Otherwise _<author>_
|
||||||
|
is assumed to be a pattern and is used to search for an existing
|
||||||
|
commit by that author (i.e. `git rev-list --all -i --author=<author>`);
|
||||||
|
the commit author is then copied from the first such commit found.
|
||||||
|
|
||||||
|
`--date=<date>`::
|
||||||
|
Override the author date used in the commit.
|
||||||
|
|
||||||
|
`-m <msg>`::
|
||||||
|
`--message=<msg>`::
|
||||||
|
Use _<msg>_ as the commit message.
|
||||||
|
If multiple `-m` options are given, their values are
|
||||||
|
concatenated as separate paragraphs.
|
||||||
|
+
|
||||||
|
The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`.
|
||||||
|
|
||||||
|
`-t <file>`::
|
||||||
|
`--template=<file>`::
|
||||||
|
When editing the commit message, start the editor with the
|
||||||
|
contents in _<file>_. The `commit.template` configuration
|
||||||
|
variable is often used to give this option implicitly to the
|
||||||
|
command. This mechanism can be used by projects that want to
|
||||||
|
guide participants with some hints on what to write in the message
|
||||||
|
in what order. If the user exits the editor without editing the
|
||||||
|
message, the commit is aborted. This has no effect when a message
|
||||||
|
is given by other means, e.g. with the `-m` or `-F` options.
|
||||||
|
|
||||||
|
include::signoff-option.adoc[]
|
||||||
|
|
||||||
|
`--trailer <token>[(=|:)<value>]`::
|
||||||
|
Specify a (_<token>_, _<value>_) pair that should be applied as a
|
||||||
|
trailer. (e.g. `git commit --trailer "Signed-off-by:C O Mitter \
|
||||||
|
<committer@example.com>" --trailer "Helped-by:C O Mitter \
|
||||||
|
<committer@example.com>"` will add the `Signed-off-by` trailer
|
||||||
|
and the `Helped-by` trailer to the commit message.)
|
||||||
|
The `trailer.*` configuration variables
|
||||||
|
(linkgit:git-interpret-trailers[1]) can be used to define if
|
||||||
|
a duplicated trailer is omitted, where in the run of trailers
|
||||||
|
each trailer would appear, and other details.
|
||||||
|
|
||||||
|
`-n`::
|
||||||
|
`--verify`::
|
||||||
|
`--no-verify`::
|
||||||
|
Bypass the `pre-commit` and `commit-msg` hooks.
|
||||||
|
See also linkgit:githooks[5].
|
||||||
|
|
||||||
|
`--allow-empty`::
|
||||||
|
Usually recording a commit that has the exact same tree as its
|
||||||
|
sole parent commit is a mistake, and the command prevents you
|
||||||
|
from making such a commit. This option bypasses the safety, and
|
||||||
|
is primarily for use by foreign SCM interface scripts.
|
||||||
|
|
||||||
|
`--allow-empty-message`::
|
||||||
|
Create a commit with an empty commit message without using plumbing
|
||||||
|
commands like linkgit:git-commit-tree[1]. Like `--allow-empty`, this
|
||||||
|
command is primarily for use by foreign SCM interface scripts.
|
||||||
|
|
||||||
|
`--cleanup=<mode>`::
|
||||||
|
Determine how the supplied commit message should be
|
||||||
|
cleaned up before committing. The '<mode>' can be `strip`,
|
||||||
|
`whitespace`, `verbatim`, `scissors` or `default`.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
`strip`::
|
||||||
|
Strip leading and trailing empty lines, trailing whitespace,
|
||||||
|
commentary and collapse consecutive empty lines.
|
||||||
|
`whitespace`::
|
||||||
|
Same as `strip` except #commentary is not removed.
|
||||||
|
`verbatim`::
|
||||||
|
Do not change the message at all.
|
||||||
|
`scissors`::
|
||||||
|
Same as `whitespace` except that everything from (and including)
|
||||||
|
the line found below is truncated, if the message is to be edited.
|
||||||
|
"`#`" can be customized with `core.commentChar`.
|
||||||
|
|
||||||
|
# ------------------------ >8 ------------------------
|
||||||
|
|
||||||
|
`default`::
|
||||||
|
Same as `strip` if the message is to be edited.
|
||||||
|
Otherwise `whitespace`.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
The default can be changed by the `commit.cleanup` configuration
|
||||||
|
variable (see linkgit:git-config[1]).
|
||||||
|
|
||||||
|
`-e`::
|
||||||
|
`--edit`::
|
||||||
|
Let the user further edit the message taken from _<file>_
|
||||||
|
with `-F <file>`, command line with `-m <message>`, and
|
||||||
|
from _<commit>_ with `-C <commit>`.
|
||||||
|
|
||||||
|
`--no-edit`::
|
||||||
|
Use the selected commit message without launching an editor.
|
||||||
|
For example, `git commit --amend --no-edit` amends a commit
|
||||||
|
without changing its commit message.
|
||||||
|
|
||||||
|
`--amend`::
|
||||||
|
Replace the tip of the current branch by creating a new
|
||||||
|
commit. The recorded tree is prepared as usual (including
|
||||||
|
the effect of the `-i` and `-o` options and explicit
|
||||||
|
pathspec), and the message from the original commit is used
|
||||||
|
as the starting point, instead of an empty message, when no
|
||||||
|
other message is specified from the command line via options
|
||||||
|
such as `-m`, `-F`, `-c`, etc. The new commit has the same
|
||||||
|
parents and author as the current one (the `--reset-author`
|
||||||
|
option can countermand this).
|
||||||
|
+
|
||||||
|
--
|
||||||
|
It is a rough equivalent for:
|
||||||
|
|
||||||
|
------
|
||||||
|
$ git reset --soft HEAD^
|
||||||
|
$ ... do something else to come up with the right tree ...
|
||||||
|
$ git commit -c ORIG_HEAD
|
||||||
|
|
||||||
|
------
|
||||||
|
but can be used to amend a merge commit.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
You should understand the implications of rewriting history if you
|
||||||
|
amend a commit that has already been published. (See the "RECOVERING
|
||||||
|
FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
|
||||||
|
|
||||||
|
`--no-post-rewrite`::
|
||||||
|
Bypass the `post-rewrite` hook.
|
||||||
|
|
||||||
|
`-i`::
|
||||||
|
`--include`::
|
||||||
|
Before making a commit out of staged contents so far,
|
||||||
|
stage the contents of paths given on the command line
|
||||||
|
as well. This is usually not what you want unless you
|
||||||
|
are concluding a conflicted merge.
|
||||||
|
|
||||||
|
`-o`::
|
||||||
|
`--only`::
|
||||||
|
Make a commit by taking the updated working tree contents
|
||||||
|
of the paths specified on the
|
||||||
|
command line, disregarding any contents that have been
|
||||||
|
staged for other paths. This is the default mode of operation of
|
||||||
|
`git commit` if any paths are given on the command line,
|
||||||
|
in which case this option can be omitted.
|
||||||
|
If this option is specified together with `--amend`, then
|
||||||
|
no paths need to be specified, which can be used to amend
|
||||||
|
the last commit without committing changes that have
|
||||||
|
already been staged. If used together with `--allow-empty`
|
||||||
|
paths are also not required, and an empty commit will be created.
|
||||||
|
|
||||||
|
`--pathspec-from-file=<file>`::
|
||||||
|
Pass pathspec in _<file>_ instead of commandline args. If
|
||||||
|
_<file>_ is exactly `-` then standard input is used. Pathspec
|
||||||
|
elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be
|
||||||
|
quoted as explained for the configuration variable `core.quotePath`
|
||||||
|
(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
|
||||||
|
global `--literal-pathspecs`.
|
||||||
|
|
||||||
|
`--pathspec-file-nul`::
|
||||||
|
Only meaningful with `--pathspec-from-file`. Pathspec elements are
|
||||||
|
separated with _NUL_ character and all other characters are taken
|
||||||
|
literally (including newlines and quotes).
|
||||||
|
|
||||||
|
`-u[<mode>]`::
|
||||||
|
`--untracked-files[=<mode>]`::
|
||||||
|
Show untracked files.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
The _<mode>_ parameter is optional (defaults to `all`), and is used to
|
||||||
|
specify the handling of untracked files; when `-u` is not used, the
|
||||||
|
default is `normal`, i.e. show untracked files and directories.
|
||||||
|
|
||||||
|
The possible options are:
|
||||||
|
|
||||||
|
`no`:: Show no untracked files
|
||||||
|
`normal`:: Shows untracked files and directories
|
||||||
|
`all`:: Also shows individual files in untracked directories.
|
||||||
|
|
||||||
|
All usual spellings for Boolean value `true` are taken as `normal`
|
||||||
|
and `false` as `no`.
|
||||||
|
The default can be changed using the `status.showUntrackedFiles`
|
||||||
|
configuration variable documented in linkgit:git-config[1].
|
||||||
|
--
|
||||||
|
|
||||||
|
`-v`::
|
||||||
|
`--verbose`::
|
||||||
|
Show unified diff between the `HEAD` commit and what
|
||||||
|
would be committed at the bottom of the commit message
|
||||||
|
template to help the user describe the commit by reminding
|
||||||
|
what changes the commit has.
|
||||||
|
Note that this diff output doesn't have its
|
||||||
|
lines prefixed with `#`. This diff will not be a part
|
||||||
|
of the commit message. See the `commit.verbose` configuration
|
||||||
|
variable in linkgit:git-config[1].
|
||||||
|
+
|
||||||
|
If specified twice, show in addition the unified diff between
|
||||||
|
what would be committed and the worktree files, i.e. the unstaged
|
||||||
|
changes to tracked files.
|
||||||
|
|
||||||
|
`-q`::
|
||||||
|
`--quiet`::
|
||||||
|
Suppress commit summary message.
|
||||||
|
|
||||||
|
`--dry-run`::
|
||||||
|
Do not create a commit, but show a list of paths that are
|
||||||
|
to be committed, paths with local changes that will be left
|
||||||
|
uncommitted and paths that are untracked.
|
||||||
|
|
||||||
|
`--status`::
|
||||||
|
Include the output of linkgit:git-status[1] in the commit
|
||||||
|
message template when using an editor to prepare the commit
|
||||||
|
message. Defaults to on, but can be used to override
|
||||||
|
configuration variable `commit.status`.
|
||||||
|
|
||||||
|
`--no-status`::
|
||||||
|
Do not include the output of linkgit:git-status[1] in the
|
||||||
|
commit message template when using an editor to prepare the
|
||||||
|
default commit message.
|
||||||
|
|
||||||
|
`-S[<key-id>]`::
|
||||||
|
`--gpg-sign[=<key-id>]`::
|
||||||
|
`--no-gpg-sign`::
|
||||||
|
GPG-sign commits. The _<key-id>_ is optional and
|
||||||
|
defaults to the committer identity; if specified, it must be
|
||||||
|
stuck to the option without a space. `--no-gpg-sign` is useful to
|
||||||
|
countermand both `commit.gpgSign` configuration variable, and
|
||||||
|
earlier `--gpg-sign`.
|
||||||
|
|
||||||
|
`--`::
|
||||||
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
|
`<pathspec>...`::
|
||||||
|
When _<pathspec>_ is given on the command line, commit the contents of
|
||||||
|
the files that match the pathspec without recording the changes
|
||||||
|
already added to the index. The contents of these files are also
|
||||||
|
staged for the next commit on top of what have been staged before.
|
||||||
|
+
|
||||||
|
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
When recording your own work, the contents of modified files in
|
||||||
|
your working tree are temporarily stored to a staging area
|
||||||
|
called the "index" with `git add`. A file can be
|
||||||
|
reverted back, only in the index but not in the working tree,
|
||||||
|
to that of the last commit with `git restore --staged <file>`,
|
||||||
|
which effectively reverts `git add` and prevents the changes to
|
||||||
|
this file from participating in the next commit. After building
|
||||||
|
the state to be committed incrementally with these commands,
|
||||||
|
`git commit` (without any pathname parameter) is used to record what
|
||||||
|
has been staged so far. This is the most basic form of the
|
||||||
|
command. An example:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit hello.c
|
||||||
|
$ git rm goodbye.c
|
||||||
|
$ git add hello.c
|
||||||
|
$ git commit
|
||||||
|
------------
|
||||||
|
|
||||||
|
Instead of staging files after each individual change, you can
|
||||||
|
tell `git commit` to notice the changes to the files whose
|
||||||
|
contents are tracked in
|
||||||
|
your working tree and do corresponding `git add` and `git rm`
|
||||||
|
for you. That is, this example does the same as the earlier
|
||||||
|
example if there is no other change in your working tree:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit hello.c
|
||||||
|
$ rm goodbye.c
|
||||||
|
$ git commit -a
|
||||||
|
------------
|
||||||
|
|
||||||
|
The command `git commit -a` first looks at your working tree,
|
||||||
|
notices that you have modified `hello.c` and removed `goodbye.c`,
|
||||||
|
and performs necessary `git add` and `git rm` for you.
|
||||||
|
|
||||||
|
After staging changes to many files, you can alter the order the
|
||||||
|
changes are recorded in, by giving pathnames to `git commit`.
|
||||||
|
When pathnames are given, the command makes a commit that
|
||||||
|
only records the changes made to the named paths:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ edit hello.c hello.h
|
||||||
|
$ git add hello.c hello.h
|
||||||
|
$ edit Makefile
|
||||||
|
$ git commit Makefile
|
||||||
|
------------
|
||||||
|
|
||||||
|
This makes a commit that records the modification to `Makefile`.
|
||||||
|
The changes staged for `hello.c` and `hello.h` are not included
|
||||||
|
in the resulting commit. However, their changes are not lost --
|
||||||
|
they are still staged and merely held back. After the above
|
||||||
|
sequence, if you do:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git commit
|
||||||
|
------------
|
||||||
|
|
||||||
|
this second commit would record the changes to `hello.c` and
|
||||||
|
`hello.h` as expected.
|
||||||
|
|
||||||
|
After a merge (initiated by `git merge` or `git pull`) stops
|
||||||
|
because of conflicts, cleanly merged
|
||||||
|
paths are already staged to be committed for you, and paths that
|
||||||
|
conflicted are left in unmerged state. You would have to first
|
||||||
|
check which paths are conflicting with `git status`
|
||||||
|
and after fixing them manually in your working tree, you would
|
||||||
|
stage the result as usual with `git add`:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git status | grep unmerged
|
||||||
|
unmerged: hello.c
|
||||||
|
$ edit hello.c
|
||||||
|
$ git add hello.c
|
||||||
|
------------
|
||||||
|
|
||||||
|
After resolving conflicts and staging the result, `git ls-files -u`
|
||||||
|
would stop mentioning the conflicted path. When you are done,
|
||||||
|
run `git commit` to finally record the merge:
|
||||||
|
|
||||||
|
------------
|
||||||
|
$ git commit
|
||||||
|
------------
|
||||||
|
|
||||||
|
As with the case to record your own changes, you can use `-a`
|
||||||
|
option to save typing. One difference is that during a merge
|
||||||
|
resolution, you cannot use `git commit` with pathnames to
|
||||||
|
alter the order the changes are committed, because the merge
|
||||||
|
should be recorded as a single commit. In fact, the command
|
||||||
|
refuses to run when given pathnames (but see `-i` option).
|
||||||
|
|
||||||
|
COMMIT INFORMATION
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Author and committer information is taken from the following environment
|
||||||
|
variables, if set:
|
||||||
|
|
||||||
|
* `GIT_AUTHOR_NAME`
|
||||||
|
* `GIT_AUTHOR_EMAIL`
|
||||||
|
* `GIT_AUTHOR_DATE`
|
||||||
|
* `GIT_COMMITTER_NAME`
|
||||||
|
* `GIT_COMMITTER_EMAIL`
|
||||||
|
* `GIT_COMMITTER_DATE`
|
||||||
|
|
||||||
|
(nb "<", ">" and "\n"s are stripped)
|
||||||
|
|
||||||
|
The author and committer names are by convention some form of a personal name
|
||||||
|
(that is, the name by which other humans refer to you), although Git does not
|
||||||
|
enforce or require any particular form. Arbitrary Unicode may be used, subject
|
||||||
|
to the constraints listed above. This name has no effect on authentication; for
|
||||||
|
that, see the `credential.username` variable in linkgit:git-config[1].
|
||||||
|
|
||||||
|
In case (some of) these environment variables are not set, the information
|
||||||
|
is taken from the configuration items `user.name` and `user.email`, or, if not
|
||||||
|
present, the environment variable `EMAIL`, or, if that is not set,
|
||||||
|
system user name and the hostname used for outgoing mail (taken
|
||||||
|
from `/etc/mailname` and falling back to the fully qualified hostname when
|
||||||
|
that file does not exist).
|
||||||
|
|
||||||
|
The `author.name` and `committer.name` and their corresponding email options
|
||||||
|
override `user.name` and `user.email` if set and are overridden themselves by
|
||||||
|
the environment variables.
|
||||||
|
|
||||||
|
The typical usage is to set just the `user.name` and `user.email` variables;
|
||||||
|
the other options are provided for more complex use cases.
|
||||||
|
|
||||||
|
:git-commit: 1
|
||||||
|
include::date-formats.adoc[]
|
||||||
|
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
Though not required, it's a good idea to begin the commit message
|
||||||
|
with a single short (no more than 50 characters) line summarizing the
|
||||||
|
change, followed by a blank line and then a more thorough description.
|
||||||
|
The text up to the first blank line in a commit message is treated
|
||||||
|
as the commit title, and that title is used throughout Git.
|
||||||
|
For example, linkgit:git-format-patch[1] turns a commit into email, and it uses
|
||||||
|
the title on the Subject line and the rest of the commit in the body.
|
||||||
|
|
||||||
|
include::i18n.adoc[]
|
||||||
|
|
||||||
|
ENVIRONMENT AND CONFIGURATION VARIABLES
|
||||||
|
---------------------------------------
|
||||||
|
The editor used to edit the commit log message will be chosen from the
|
||||||
|
`GIT_EDITOR` environment variable, the `core.editor` configuration variable, the
|
||||||
|
`VISUAL` environment variable, or the `EDITOR` environment variable (in that
|
||||||
|
order). See linkgit:git-var[1] for details.
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-rest.adoc[]
|
||||||
|
|
||||||
|
include::config/commit.adoc[]
|
||||||
|
|
||||||
|
HOOKS
|
||||||
|
-----
|
||||||
|
This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`,
|
||||||
|
`post-commit` and `post-rewrite` hooks. See linkgit:githooks[5] for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
FILES
|
||||||
|
-----
|
||||||
|
|
||||||
|
`$GIT_DIR/COMMIT_EDITMSG`::
|
||||||
|
This file contains the commit message of a commit in progress.
|
||||||
|
If `git commit` exits due to an error before creating a commit,
|
||||||
|
any commit message that has been provided by the user (e.g., in
|
||||||
|
an editor session) will be available in this file, but will be
|
||||||
|
overwritten by the next invocation of `git commit`.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-add[1],
|
||||||
|
linkgit:git-rm[1],
|
||||||
|
linkgit:git-mv[1],
|
||||||
|
linkgit:git-merge[1],
|
||||||
|
linkgit:git-commit-tree[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
658
app/src/main/assets/manpages/git-config.txt
Normal file
658
app/src/main/assets/manpages/git-config.txt
Normal file
@@ -0,0 +1,658 @@
|
|||||||
|
git-config(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-config - Get and set repository or global options
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git config list' [<file-option>] [<display-option>] [--includes]
|
||||||
|
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<pattern>] [--fixed-value] [--default=<default>] [--url=<url>] <name>
|
||||||
|
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<pattern>] [--fixed-value] <name> <value>
|
||||||
|
'git config unset' [<file-option>] [--all] [--value=<pattern>] [--fixed-value] <name>
|
||||||
|
'git config rename-section' [<file-option>] <old-name> <new-name>
|
||||||
|
'git config remove-section' [<file-option>] <name>
|
||||||
|
'git config edit' [<file-option>]
|
||||||
|
'git config' [<file-option>] --get-colorbool <name> [<stdout-is-tty>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
You can query/set/replace/unset options with this command. The name is
|
||||||
|
actually the section and the key separated by a dot, and the value will be
|
||||||
|
escaped.
|
||||||
|
|
||||||
|
Multiple lines can be added to an option by using the `--append` option.
|
||||||
|
If you want to update or unset an option which can occur on multiple
|
||||||
|
lines, `--value=<pattern>` (which is an extended regular expression,
|
||||||
|
unless the `--fixed-value` option is given) needs to be given. Only the
|
||||||
|
existing values that match the pattern are updated or unset. If
|
||||||
|
you want to handle the lines that do *not* match the pattern, just
|
||||||
|
prepend a single exclamation mark in front (see also <<EXAMPLES>>),
|
||||||
|
but note that this only works when the `--fixed-value` option is not
|
||||||
|
in use.
|
||||||
|
|
||||||
|
The `--type=<type>` option instructs 'git config' to ensure that incoming and
|
||||||
|
outgoing values are canonicalize-able under the given <type>. If no
|
||||||
|
`--type=<type>` is given, no canonicalization will be performed. Callers may
|
||||||
|
unset an existing `--type` specifier with `--no-type`.
|
||||||
|
|
||||||
|
When reading, the values are read from the system, global and
|
||||||
|
repository local configuration files by default, and options
|
||||||
|
`--system`, `--global`, `--local`, `--worktree` and
|
||||||
|
`--file <filename>` can be used to tell the command to read from only
|
||||||
|
that location (see <<FILES>>).
|
||||||
|
|
||||||
|
When writing, the new value is written to the repository local
|
||||||
|
configuration file by default, and options `--system`, `--global`,
|
||||||
|
`--worktree`, `--file <filename>` can be used to tell the command to
|
||||||
|
write to that location (you can say `--local` but that is the
|
||||||
|
default).
|
||||||
|
|
||||||
|
This command will fail with non-zero status upon error. Some exit
|
||||||
|
codes are:
|
||||||
|
|
||||||
|
- The section or key is invalid (ret=1),
|
||||||
|
- no section or name was provided (ret=2),
|
||||||
|
- the config file is invalid (ret=3),
|
||||||
|
- the config file cannot be written (ret=4),
|
||||||
|
- you try to unset an option which does not exist (ret=5),
|
||||||
|
- you try to unset/set an option for which multiple lines match (ret=5), or
|
||||||
|
- you try to use an invalid regexp (ret=6).
|
||||||
|
|
||||||
|
On success, the command returns the exit code 0.
|
||||||
|
|
||||||
|
A list of all available configuration variables can be obtained using the
|
||||||
|
`git help --config` command.
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
--------
|
||||||
|
|
||||||
|
list::
|
||||||
|
List all variables set in config file, along with their values.
|
||||||
|
|
||||||
|
get::
|
||||||
|
Emits the value of the specified key. If key is present multiple times
|
||||||
|
in the configuration, emits the last value. If `--all` is specified,
|
||||||
|
emits all values associated with key. Returns error code 1 if key is
|
||||||
|
not present.
|
||||||
|
|
||||||
|
set::
|
||||||
|
Set value for one or more config options. By default, this command
|
||||||
|
refuses to write multi-valued config options. Passing `--all` will
|
||||||
|
replace all multi-valued config options with the new value, whereas
|
||||||
|
`--value=` will replace all config options whose values match the given
|
||||||
|
pattern.
|
||||||
|
|
||||||
|
unset::
|
||||||
|
Unset value for one or more config options. By default, this command
|
||||||
|
refuses to unset multi-valued keys. Passing `--all` will unset all
|
||||||
|
multi-valued config options, whereas `--value` will unset all config
|
||||||
|
options whose values match the given pattern.
|
||||||
|
|
||||||
|
rename-section::
|
||||||
|
Rename the given section to a new name.
|
||||||
|
|
||||||
|
remove-section::
|
||||||
|
Remove the given section from the configuration file.
|
||||||
|
|
||||||
|
edit::
|
||||||
|
Opens an editor to modify the specified config file; either
|
||||||
|
`--system`, `--global`, `--local` (default), `--worktree`, or
|
||||||
|
`--file <config-file>`.
|
||||||
|
|
||||||
|
[[OPTIONS]]
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--replace-all::
|
||||||
|
Default behavior is to replace at most one line. This replaces
|
||||||
|
all lines matching the key (and optionally `--value=<pattern>`).
|
||||||
|
|
||||||
|
--append::
|
||||||
|
Adds a new line to the option without altering any existing
|
||||||
|
values. This is the same as providing '--value=^$' in `set`.
|
||||||
|
|
||||||
|
--comment <message>::
|
||||||
|
Append a comment at the end of new or modified lines.
|
||||||
|
+
|
||||||
|
If _<message>_ begins with one or more whitespaces followed
|
||||||
|
by "#", it is used as-is. If it begins with "#", a space is
|
||||||
|
prepended before it is used. Otherwise, a string " # " (a
|
||||||
|
space followed by a hash followed by a space) is prepended
|
||||||
|
to it. And the resulting string is placed immediately after
|
||||||
|
the value defined for the variable. The _<message>_ must
|
||||||
|
not contain linefeed characters (no multi-line comments are
|
||||||
|
permitted).
|
||||||
|
|
||||||
|
--all::
|
||||||
|
With `get`, return all values for a multi-valued key.
|
||||||
|
|
||||||
|
--regexp::
|
||||||
|
With `get`, interpret the name as a regular expression. Regular
|
||||||
|
expression matching is currently case-sensitive and done against a
|
||||||
|
canonicalized version of the key in which section and variable names
|
||||||
|
are lowercased, but subsection names are not.
|
||||||
|
|
||||||
|
--url=<URL>::
|
||||||
|
When given a two-part <name> as <section>.<key>, the value for
|
||||||
|
<section>.<URL>.<key> whose <URL> part matches the best to the
|
||||||
|
given URL is returned (if no such key exists, the value for
|
||||||
|
<section>.<key> is used as a fallback). When given just the
|
||||||
|
<section> as name, do so for all the keys in the section and
|
||||||
|
list them. Returns error code 1 if no value is found.
|
||||||
|
|
||||||
|
--global::
|
||||||
|
For writing options: write to global `~/.gitconfig` file
|
||||||
|
rather than the repository `.git/config`, write to
|
||||||
|
`$XDG_CONFIG_HOME/git/config` file if this file exists and the
|
||||||
|
`~/.gitconfig` file doesn't.
|
||||||
|
+
|
||||||
|
For reading options: read only from global `~/.gitconfig` and from
|
||||||
|
`$XDG_CONFIG_HOME/git/config` rather than from all available files.
|
||||||
|
+
|
||||||
|
See also <<FILES>>.
|
||||||
|
|
||||||
|
--system::
|
||||||
|
For writing options: write to system-wide
|
||||||
|
`$(prefix)/etc/gitconfig` rather than the repository
|
||||||
|
`.git/config`.
|
||||||
|
+
|
||||||
|
For reading options: read only from system-wide `$(prefix)/etc/gitconfig`
|
||||||
|
rather than from all available files.
|
||||||
|
+
|
||||||
|
See also <<FILES>>.
|
||||||
|
|
||||||
|
--local::
|
||||||
|
For writing options: write to the repository `.git/config` file.
|
||||||
|
This is the default behavior.
|
||||||
|
+
|
||||||
|
For reading options: read only from the repository `.git/config` rather than
|
||||||
|
from all available files.
|
||||||
|
+
|
||||||
|
See also <<FILES>>.
|
||||||
|
|
||||||
|
--worktree::
|
||||||
|
Similar to `--local` except that `$GIT_DIR/config.worktree` is
|
||||||
|
read from or written to if `extensions.worktreeConfig` is
|
||||||
|
enabled. If not it's the same as `--local`. Note that `$GIT_DIR`
|
||||||
|
is equal to `$GIT_COMMON_DIR` for the main working tree, but is of
|
||||||
|
the form `$GIT_DIR/worktrees/<id>/` for other working trees. See
|
||||||
|
linkgit:git-worktree[1] to learn how to enable
|
||||||
|
`extensions.worktreeConfig`.
|
||||||
|
|
||||||
|
-f <config-file>::
|
||||||
|
--file <config-file>::
|
||||||
|
For writing options: write to the specified file rather than the
|
||||||
|
repository `.git/config`.
|
||||||
|
+
|
||||||
|
For reading options: read only from the specified file rather than from all
|
||||||
|
available files.
|
||||||
|
+
|
||||||
|
See also <<FILES>>.
|
||||||
|
|
||||||
|
--blob <blob>::
|
||||||
|
Similar to `--file` but use the given blob instead of a file. E.g.
|
||||||
|
you can use 'master:.gitmodules' to read values from the file
|
||||||
|
'.gitmodules' in the master branch. See "SPECIFYING REVISIONS"
|
||||||
|
section in linkgit:gitrevisions[7] for a more complete list of
|
||||||
|
ways to spell blob names.
|
||||||
|
|
||||||
|
`--value=<pattern>`::
|
||||||
|
`--no-value`::
|
||||||
|
With `get`, `set`, and `unset`, match only against
|
||||||
|
_<pattern>_. The pattern is an extended regular expression unless
|
||||||
|
`--fixed-value` is given.
|
||||||
|
+
|
||||||
|
Use `--no-value` to unset _<pattern>_.
|
||||||
|
|
||||||
|
--fixed-value::
|
||||||
|
When used with `--value=<pattern>`, treat _<pattern>_ as
|
||||||
|
an exact string instead of a regular expression. This will restrict
|
||||||
|
the name/value pairs that are matched to only those where the value
|
||||||
|
is exactly equal to _<pattern>_.
|
||||||
|
|
||||||
|
--type <type>::
|
||||||
|
'git config' will ensure that any input or output is valid under the given
|
||||||
|
type constraint(s), and will canonicalize outgoing values in `<type>`'s
|
||||||
|
canonical form.
|
||||||
|
+
|
||||||
|
Valid `<type>`'s include:
|
||||||
|
+
|
||||||
|
- 'bool': canonicalize values `true`, `yes`, `on`, and positive
|
||||||
|
numbers as "true", and values `false`, `no`, `off` and `0` as
|
||||||
|
"false".
|
||||||
|
- 'int': canonicalize values as simple decimal numbers. An optional suffix of
|
||||||
|
'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or
|
||||||
|
1073741824 upon input.
|
||||||
|
- 'bool-or-int': canonicalize according to either 'bool' or 'int', as described
|
||||||
|
above.
|
||||||
|
- 'path': canonicalize by expanding a leading `~` to the value of `$HOME` and
|
||||||
|
`~user` to the home directory for the specified user. This specifier has no
|
||||||
|
effect when setting the value (but you can use `git config section.variable
|
||||||
|
~/` from the command line to let your shell do the expansion.)
|
||||||
|
- 'expiry-date': canonicalize by converting from a fixed or relative date-string
|
||||||
|
to a timestamp. This specifier has no effect when setting the value.
|
||||||
|
- 'color': When getting a value, canonicalize by converting to an ANSI color
|
||||||
|
escape sequence. When setting a value, a sanity-check is performed to ensure
|
||||||
|
that the given value is canonicalize-able as an ANSI color, but it is written
|
||||||
|
as-is.
|
||||||
|
+
|
||||||
|
If the command is in `list` mode, then the `--type <type>` argument will apply
|
||||||
|
to each listed config value. If the value does not successfully parse in that
|
||||||
|
format, then it will be omitted from the list.
|
||||||
|
|
||||||
|
--bool::
|
||||||
|
--int::
|
||||||
|
--bool-or-int::
|
||||||
|
--path::
|
||||||
|
--expiry-date::
|
||||||
|
Historical options for selecting a type specifier. Prefer instead `--type`
|
||||||
|
(see above).
|
||||||
|
|
||||||
|
--no-type::
|
||||||
|
Un-sets the previously set type specifier (if one was previously set). This
|
||||||
|
option requests that 'git config' not canonicalize the retrieved variable.
|
||||||
|
`--no-type` has no effect without `--type=<type>` or `--<type>`.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
--null::
|
||||||
|
For all options that output values and/or keys, always
|
||||||
|
end values with the null character (instead of a
|
||||||
|
newline). Use newline instead as a delimiter between
|
||||||
|
key and value. This allows for secure parsing of the
|
||||||
|
output without getting confused e.g. by values that
|
||||||
|
contain line breaks.
|
||||||
|
|
||||||
|
--name-only::
|
||||||
|
Output only the names of config variables for `list` or
|
||||||
|
`get`.
|
||||||
|
|
||||||
|
`--show-names`::
|
||||||
|
`--no-show-names`::
|
||||||
|
With `get`, show config keys in addition to their values. The
|
||||||
|
default is `--no-show-names` unless `--url` is given and there
|
||||||
|
are no subsections in _<name>_.
|
||||||
|
|
||||||
|
--show-origin::
|
||||||
|
Augment the output of all queried config options with the
|
||||||
|
origin type (file, standard input, blob, command line) and
|
||||||
|
the actual origin (config file path, ref, or blob id if
|
||||||
|
applicable).
|
||||||
|
|
||||||
|
--show-scope::
|
||||||
|
Similar to `--show-origin` in that it augments the output of
|
||||||
|
all queried config options with the scope of that value
|
||||||
|
(worktree, local, global, system, command).
|
||||||
|
|
||||||
|
--get-colorbool <name> [<stdout-is-tty>]::
|
||||||
|
|
||||||
|
Find the color setting for `<name>` (e.g. `color.diff`) and output
|
||||||
|
"true" or "false". `<stdout-is-tty>` should be either "true" or
|
||||||
|
"false", and is taken into account when configuration says
|
||||||
|
"auto". If `<stdout-is-tty>` is missing, then checks the standard
|
||||||
|
output of the command itself, and exits with status 0 if color
|
||||||
|
is to be used, or exits with status 1 otherwise.
|
||||||
|
When the color setting for `name` is undefined, the command uses
|
||||||
|
`color.ui` as fallback.
|
||||||
|
|
||||||
|
--includes::
|
||||||
|
--no-includes::
|
||||||
|
Respect `include.*` directives in config files when looking up
|
||||||
|
values. Defaults to `off` when a specific file is given (e.g.,
|
||||||
|
using `--file`, `--global`, etc) and `on` when searching all
|
||||||
|
config files.
|
||||||
|
|
||||||
|
--default <value>::
|
||||||
|
When using `get`, and the requested variable is not found, behave as if
|
||||||
|
<value> were the value assigned to that variable.
|
||||||
|
|
||||||
|
DEPRECATED MODES
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The following modes have been deprecated in favor of subcommands. It is
|
||||||
|
recommended to migrate to the new syntax.
|
||||||
|
|
||||||
|
'git config <name>'::
|
||||||
|
Replaced by `git config get <name>`.
|
||||||
|
|
||||||
|
'git config <name> <value> [<value-pattern>]'::
|
||||||
|
Replaced by `git config set [--value=<pattern>] <name> <value>`.
|
||||||
|
|
||||||
|
-l::
|
||||||
|
--list::
|
||||||
|
Replaced by `git config list`.
|
||||||
|
|
||||||
|
--get <name> [<value-pattern>]::
|
||||||
|
Replaced by `git config get [--value=<pattern>] <name>`.
|
||||||
|
|
||||||
|
--get-all <name> [<value-pattern>]::
|
||||||
|
Replaced by `git config get [--value=<pattern>] --all <name>`.
|
||||||
|
|
||||||
|
--get-regexp <name-regexp>::
|
||||||
|
Replaced by `git config get --all --show-names --regexp <name-regexp>`.
|
||||||
|
|
||||||
|
--get-urlmatch <name> <URL>::
|
||||||
|
Replaced by `git config get --url=<URL> <name>`.
|
||||||
|
|
||||||
|
--get-color <name> [<default>]::
|
||||||
|
Replaced by `git config get --type=color [--default=<default>] <name>`.
|
||||||
|
|
||||||
|
--add <name> <value>::
|
||||||
|
Replaced by `git config set --append <name> <value>`.
|
||||||
|
|
||||||
|
--unset <name> [<value-pattern>]::
|
||||||
|
Replaced by `git config unset [--value=<pattern>] <name>`.
|
||||||
|
|
||||||
|
--unset-all <name> [<value-pattern>]::
|
||||||
|
Replaced by `git config unset [--value=<pattern>] --all <name>`.
|
||||||
|
|
||||||
|
--rename-section <old-name> <new-name>::
|
||||||
|
Replaced by `git config rename-section <old-name> <new-name>`.
|
||||||
|
|
||||||
|
--remove-section <name>::
|
||||||
|
Replaced by `git config remove-section <name>`.
|
||||||
|
|
||||||
|
-e::
|
||||||
|
--edit::
|
||||||
|
Replaced by `git config edit`.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
`pager.config` is only respected when listing configuration, i.e., when
|
||||||
|
using `list` or `get` which may return multiple results. The default is to use
|
||||||
|
a pager.
|
||||||
|
|
||||||
|
[[FILES]]
|
||||||
|
FILES
|
||||||
|
-----
|
||||||
|
|
||||||
|
By default, 'git config' will read configuration options from multiple
|
||||||
|
files:
|
||||||
|
|
||||||
|
$(prefix)/etc/gitconfig::
|
||||||
|
System-wide configuration file.
|
||||||
|
|
||||||
|
$XDG_CONFIG_HOME/git/config::
|
||||||
|
~/.gitconfig::
|
||||||
|
User-specific configuration files. When the XDG_CONFIG_HOME environment
|
||||||
|
variable is not set or empty, $HOME/.config/ is used as
|
||||||
|
$XDG_CONFIG_HOME.
|
||||||
|
+
|
||||||
|
These are also called "global" configuration files. If both files exist, both
|
||||||
|
files are read in the order given above.
|
||||||
|
|
||||||
|
$GIT_DIR/config::
|
||||||
|
Repository specific configuration file.
|
||||||
|
|
||||||
|
$GIT_DIR/config.worktree::
|
||||||
|
This is optional and is only searched when
|
||||||
|
`extensions.worktreeConfig` is present in $GIT_DIR/config.
|
||||||
|
|
||||||
|
You may also provide additional configuration parameters when running any
|
||||||
|
git command by using the `-c` option. See linkgit:git[1] for details.
|
||||||
|
|
||||||
|
Options will be read from all of these files that are available. If the
|
||||||
|
global or the system-wide configuration files are missing or unreadable they
|
||||||
|
will be ignored. If the repository configuration file is missing or unreadable,
|
||||||
|
'git config' will exit with a non-zero error code. An error message is produced
|
||||||
|
if the file is unreadable, but not if it is missing.
|
||||||
|
|
||||||
|
The files are read in the order given above, with last value found taking
|
||||||
|
precedence over values read earlier. When multiple values are taken then all
|
||||||
|
values of a key from all files will be used.
|
||||||
|
|
||||||
|
By default, options are only written to the repository specific
|
||||||
|
configuration file. Note that this also affects options like `set`
|
||||||
|
and `unset`. *'git config' will only ever change one file at a time*.
|
||||||
|
|
||||||
|
You can limit which configuration sources are read from or written to by
|
||||||
|
specifying the path of a file with the `--file` option, or by specifying a
|
||||||
|
configuration scope with `--system`, `--global`, `--local`, or `--worktree`.
|
||||||
|
For more, see <<OPTIONS>> above.
|
||||||
|
|
||||||
|
[[SCOPES]]
|
||||||
|
SCOPES
|
||||||
|
------
|
||||||
|
|
||||||
|
Each configuration source falls within a configuration scope. The scopes
|
||||||
|
are:
|
||||||
|
|
||||||
|
system::
|
||||||
|
$(prefix)/etc/gitconfig
|
||||||
|
|
||||||
|
global::
|
||||||
|
$XDG_CONFIG_HOME/git/config
|
||||||
|
+
|
||||||
|
~/.gitconfig
|
||||||
|
|
||||||
|
local::
|
||||||
|
$GIT_DIR/config
|
||||||
|
|
||||||
|
worktree::
|
||||||
|
$GIT_DIR/config.worktree
|
||||||
|
|
||||||
|
command::
|
||||||
|
GIT_CONFIG_{COUNT,KEY,VALUE} environment variables (see <<ENVIRONMENT>>
|
||||||
|
below)
|
||||||
|
+
|
||||||
|
the `-c` option
|
||||||
|
|
||||||
|
With the exception of 'command', each scope corresponds to a command line
|
||||||
|
option: `--system`, `--global`, `--local`, `--worktree`.
|
||||||
|
|
||||||
|
When reading options, specifying a scope will only read options from the
|
||||||
|
files within that scope. When writing options, specifying a scope will write
|
||||||
|
to the files within that scope (instead of the repository specific
|
||||||
|
configuration file). See <<OPTIONS>> above for a complete description.
|
||||||
|
|
||||||
|
Most configuration options are respected regardless of the scope it is
|
||||||
|
defined in, but some options are only respected in certain scopes. See the
|
||||||
|
respective option's documentation for the full details.
|
||||||
|
|
||||||
|
Protected configuration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Protected configuration refers to the 'system', 'global', and 'command' scopes.
|
||||||
|
For security reasons, certain options are only respected when they are
|
||||||
|
specified in protected configuration, and ignored otherwise.
|
||||||
|
|
||||||
|
Git treats these scopes as if they are controlled by the user or a trusted
|
||||||
|
administrator. This is because an attacker who controls these scopes can do
|
||||||
|
substantial harm without using Git, so it is assumed that the user's environment
|
||||||
|
protects these scopes against attackers.
|
||||||
|
|
||||||
|
[[ENVIRONMENT]]
|
||||||
|
ENVIRONMENT
|
||||||
|
-----------
|
||||||
|
|
||||||
|
GIT_CONFIG_GLOBAL::
|
||||||
|
GIT_CONFIG_SYSTEM::
|
||||||
|
Take the configuration from the given files instead from global or
|
||||||
|
system-level configuration. See linkgit:git[1] for details.
|
||||||
|
|
||||||
|
GIT_CONFIG_NOSYSTEM::
|
||||||
|
Whether to skip reading settings from the system-wide
|
||||||
|
$(prefix)/etc/gitconfig file. See linkgit:git[1] for details.
|
||||||
|
|
||||||
|
See also <<FILES>>.
|
||||||
|
|
||||||
|
GIT_CONFIG_COUNT::
|
||||||
|
GIT_CONFIG_KEY_<n>::
|
||||||
|
GIT_CONFIG_VALUE_<n>::
|
||||||
|
If GIT_CONFIG_COUNT is set to a positive number, all environment pairs
|
||||||
|
GIT_CONFIG_KEY_<n> and GIT_CONFIG_VALUE_<n> up to that number will be
|
||||||
|
added to the process's runtime configuration. The config pairs are
|
||||||
|
zero-indexed. Any missing key or value is treated as an error. An empty
|
||||||
|
GIT_CONFIG_COUNT is treated the same as GIT_CONFIG_COUNT=0, namely no
|
||||||
|
pairs are processed. These environment variables will override values
|
||||||
|
in configuration files, but will be overridden by any explicit options
|
||||||
|
passed via `git -c`.
|
||||||
|
+
|
||||||
|
This is useful for cases where you want to spawn multiple git commands
|
||||||
|
with a common configuration but cannot depend on a configuration file,
|
||||||
|
for example when writing scripts.
|
||||||
|
|
||||||
|
GIT_CONFIG::
|
||||||
|
If no `--file` option is provided to `git config`, use the file
|
||||||
|
given by `GIT_CONFIG` as if it were provided via `--file`. This
|
||||||
|
variable has no effect on other Git commands, and is mostly for
|
||||||
|
historical compatibility; there is generally no reason to use it
|
||||||
|
instead of the `--file` option.
|
||||||
|
|
||||||
|
[[EXAMPLES]]
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Given a .git/config like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
#
|
||||||
|
# This is the config file, and
|
||||||
|
# a '#' or ';' character indicates
|
||||||
|
# a comment
|
||||||
|
#
|
||||||
|
|
||||||
|
; core variables
|
||||||
|
[core]
|
||||||
|
; Don't trust file modes
|
||||||
|
filemode = false
|
||||||
|
|
||||||
|
; Our diff algorithm
|
||||||
|
[diff]
|
||||||
|
external = /usr/local/bin/diff-wrapper
|
||||||
|
renames = true
|
||||||
|
|
||||||
|
; Proxy settings
|
||||||
|
[core]
|
||||||
|
gitproxy=proxy-command for kernel.org
|
||||||
|
gitproxy=default-proxy ; for all the rest
|
||||||
|
|
||||||
|
; HTTP
|
||||||
|
[http]
|
||||||
|
sslVerify
|
||||||
|
[http "https://weak.example.com"]
|
||||||
|
sslVerify = false
|
||||||
|
cookieFile = /tmp/cookie.txt
|
||||||
|
------------
|
||||||
|
|
||||||
|
you can set the filemode to true with
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config set core.filemode true
|
||||||
|
------------
|
||||||
|
|
||||||
|
The hypothetical proxy command entries actually have a postfix to discern
|
||||||
|
what URL they apply to. Here is how to change the entry for kernel.org
|
||||||
|
to "ssh".
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config set --value='for kernel.org$' core.gitproxy '"ssh" for kernel.org'
|
||||||
|
------------
|
||||||
|
|
||||||
|
This makes sure that only the key/value pair for kernel.org is replaced.
|
||||||
|
|
||||||
|
To delete the entry for renames, do
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config unset diff.renames
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you want to delete an entry for a multivar (like core.gitproxy above),
|
||||||
|
you have to provide a regex matching the value of exactly one line.
|
||||||
|
|
||||||
|
To query the value for a given key, do
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config get core.filemode
|
||||||
|
------------
|
||||||
|
|
||||||
|
or, to query a multivar:
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config get --value="for kernel.org$" core.gitproxy
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you want to know all the values for a multivar, do:
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config get --all --show-names core.gitproxy
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you like to live dangerously, you can replace *all* core.gitproxy by a
|
||||||
|
new one with
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config set --all core.gitproxy ssh
|
||||||
|
------------
|
||||||
|
|
||||||
|
However, if you really only want to replace the line for the default proxy,
|
||||||
|
i.e. the one without a "for ..." postfix, do something like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config set --value='! for ' core.gitproxy ssh
|
||||||
|
------------
|
||||||
|
|
||||||
|
To actually match only values with an exclamation mark, you have to
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config set --value='[!]' section.key value
|
||||||
|
------------
|
||||||
|
|
||||||
|
To add a new proxy, without altering any of the existing ones, use
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config set --append core.gitproxy '"proxy-command" for example.com'
|
||||||
|
------------
|
||||||
|
|
||||||
|
An example to use customized color from the configuration in your
|
||||||
|
script:
|
||||||
|
|
||||||
|
------------
|
||||||
|
#!/bin/sh
|
||||||
|
WS=$(git config get --type=color --default="blue reverse" color.diff.whitespace)
|
||||||
|
RESET=$(git config get --type=color --default="reset" "")
|
||||||
|
echo "${WS}your whitespace color or blue reverse${RESET}"
|
||||||
|
------------
|
||||||
|
|
||||||
|
For URLs in `https://weak.example.com`, `http.sslVerify` is set to
|
||||||
|
false, while it is set to `true` for all others:
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git config get --type=bool --url=https://good.example.com http.sslverify
|
||||||
|
true
|
||||||
|
% git config get --type=bool --url=https://weak.example.com http.sslverify
|
||||||
|
false
|
||||||
|
% git config get --url=https://weak.example.com http
|
||||||
|
http.cookieFile /tmp/cookie.txt
|
||||||
|
http.sslverify false
|
||||||
|
------------
|
||||||
|
|
||||||
|
include::config.adoc[]
|
||||||
|
|
||||||
|
BUGS
|
||||||
|
----
|
||||||
|
When using the deprecated `[section.subsection]` syntax, changing a value
|
||||||
|
will result in adding a multi-line key instead of a change, if the subsection
|
||||||
|
is given with at least one uppercase character. For example when the config
|
||||||
|
looks like
|
||||||
|
|
||||||
|
--------
|
||||||
|
[section.subsection]
|
||||||
|
key = value1
|
||||||
|
--------
|
||||||
|
|
||||||
|
and running `git config section.Subsection.key value2` will result in
|
||||||
|
|
||||||
|
--------
|
||||||
|
[section.subsection]
|
||||||
|
key = value1
|
||||||
|
key = value2
|
||||||
|
--------
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
56
app/src/main/assets/manpages/git-count-objects.txt
Normal file
56
app/src/main/assets/manpages/git-count-objects.txt
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
git-count-objects(1)
|
||||||
|
====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-count-objects - Count unpacked number of objects and their disk consumption
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git count-objects' [-v] [-H | --human-readable]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Counts the number of unpacked object files and disk space consumed by
|
||||||
|
them, to help you decide when it is a good time to repack.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-v::
|
||||||
|
--verbose::
|
||||||
|
Provide more detailed reports:
|
||||||
|
+
|
||||||
|
count: the number of loose objects
|
||||||
|
+
|
||||||
|
size: disk space consumed by loose objects, in KiB (unless -H is specified)
|
||||||
|
+
|
||||||
|
in-pack: the number of in-pack objects
|
||||||
|
+
|
||||||
|
packs: the number of pack files
|
||||||
|
+
|
||||||
|
size-pack: disk space consumed by the packs, in KiB (unless -H is specified)
|
||||||
|
+
|
||||||
|
prune-packable: the number of loose objects that are also present in
|
||||||
|
the packs. These objects could be pruned using `git prune-packed`.
|
||||||
|
+
|
||||||
|
garbage: the number of files in the object database that are neither valid loose
|
||||||
|
objects nor valid packs
|
||||||
|
+
|
||||||
|
size-garbage: disk space consumed by garbage files, in KiB (unless -H is
|
||||||
|
specified)
|
||||||
|
+
|
||||||
|
alternate: absolute path of alternate object databases; may appear
|
||||||
|
multiple times, one line per path. Note that if the path contains
|
||||||
|
non-printable characters, it may be surrounded by double-quotes and
|
||||||
|
contain C-style backslashed escape sequences.
|
||||||
|
|
||||||
|
-H::
|
||||||
|
--human-readable::
|
||||||
|
|
||||||
|
Print sizes in human readable format
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
git-credential-cache{litdd}daemon(1)
|
||||||
|
====================================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-credential-cache--daemon - Temporarily store user credentials in memory
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git credential-cache{litdd}daemon' [--debug] <socket-path>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
NOTE: You probably don't want to invoke this command yourself; it is
|
||||||
|
started automatically when you use linkgit:git-credential-cache[1].
|
||||||
|
|
||||||
|
This command listens on the Unix domain socket specified by `<socket-path>`
|
||||||
|
for `git-credential-cache` clients. Clients may store and retrieve
|
||||||
|
credentials. Each credential is held for a timeout specified by the
|
||||||
|
client; once no credentials are held, the daemon exits.
|
||||||
|
|
||||||
|
If the `--debug` option is specified, the daemon does not close its
|
||||||
|
stderr stream, and may output extra diagnostics to it even after it has
|
||||||
|
begun listening for clients.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
100
app/src/main/assets/manpages/git-credential-cache.txt
Normal file
100
app/src/main/assets/manpages/git-credential-cache.txt
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
git-credential-cache(1)
|
||||||
|
=======================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-credential-cache - Helper to temporarily store passwords in memory
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
-----------------------------
|
||||||
|
git config credential.helper 'cache [<options>]'
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This command caches credentials for use by future Git programs.
|
||||||
|
The stored credentials are kept in memory of the cache-daemon
|
||||||
|
process (instead of being written to a file) and are forgotten after a
|
||||||
|
configurable timeout. Credentials are forgotten sooner if the
|
||||||
|
cache-daemon dies, for example if the system restarts. The cache
|
||||||
|
is accessible over a Unix domain socket, restricted to the current
|
||||||
|
user by filesystem permissions.
|
||||||
|
|
||||||
|
You probably don't want to invoke this command directly; it is meant to
|
||||||
|
be used as a credential helper by other parts of Git. See
|
||||||
|
linkgit:gitcredentials[7] or `EXAMPLES` below.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--timeout <seconds>::
|
||||||
|
|
||||||
|
Number of seconds to cache credentials (default: 900).
|
||||||
|
|
||||||
|
--socket <path>::
|
||||||
|
|
||||||
|
Use `<path>` to contact a running cache daemon (or start a new
|
||||||
|
cache daemon if one is not started).
|
||||||
|
Defaults to `$XDG_CACHE_HOME/git/credential/socket` unless
|
||||||
|
`~/.git-credential-cache/` exists in which case
|
||||||
|
`~/.git-credential-cache/socket` is used instead.
|
||||||
|
If your home directory is on a network-mounted filesystem, you
|
||||||
|
may need to change this to a local filesystem. You must specify
|
||||||
|
an absolute path.
|
||||||
|
|
||||||
|
CONTROLLING THE DAEMON
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
If you would like the daemon to exit early, forgetting all cached
|
||||||
|
credentials before their timeout, you can issue an `exit` action:
|
||||||
|
|
||||||
|
--------------------------------------
|
||||||
|
git credential-cache exit
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
The point of this helper is to reduce the number of times you must type
|
||||||
|
your username or password. For example:
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
$ git config credential.helper cache
|
||||||
|
$ git push http://example.com/repo.git
|
||||||
|
Username: <type your username>
|
||||||
|
Password: <type your password>
|
||||||
|
|
||||||
|
[work for 5 more minutes]
|
||||||
|
$ git push http://example.com/repo.git
|
||||||
|
[your credentials are used automatically]
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
You can provide options via the credential.helper configuration
|
||||||
|
variable (this example increases the cache time to 1 hour):
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
$ git config credential.helper 'cache --timeout=3600'
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
PERSONAL ACCESS TOKENS
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Some remotes accept personal access tokens, which are randomly
|
||||||
|
generated and hard to memorise. They typically have a lifetime of weeks
|
||||||
|
or months.
|
||||||
|
|
||||||
|
git-credential-cache is inherently unsuitable for persistent storage of
|
||||||
|
personal access tokens. The credential will be forgotten after the cache
|
||||||
|
timeout. Even if you configure a long timeout, credentials will be
|
||||||
|
forgotten if the daemon dies.
|
||||||
|
|
||||||
|
To avoid frequently regenerating personal access tokens, configure a
|
||||||
|
credential helper with persistent storage. Alternatively, configure an
|
||||||
|
OAuth credential helper to generate credentials automatically. See
|
||||||
|
linkgit:gitcredentials[7], sections "Available helpers" and "OAuth".
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
110
app/src/main/assets/manpages/git-credential-store.txt
Normal file
110
app/src/main/assets/manpages/git-credential-store.txt
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
git-credential-store(1)
|
||||||
|
=======================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-credential-store - Helper to store credentials on disk
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
-------------------
|
||||||
|
git config credential.helper 'store [<options>]'
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
NOTE: Using this helper will store your passwords unencrypted on disk,
|
||||||
|
protected only by filesystem permissions. If this is not an acceptable
|
||||||
|
security tradeoff, try linkgit:git-credential-cache[1], or find a helper
|
||||||
|
that integrates with secure storage provided by your operating system.
|
||||||
|
|
||||||
|
This command stores credentials indefinitely on disk for use by future
|
||||||
|
Git programs.
|
||||||
|
|
||||||
|
You probably don't want to invoke this command directly; it is meant to
|
||||||
|
be used as a credential helper by other parts of git. See
|
||||||
|
linkgit:gitcredentials[7] or `EXAMPLES` below.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--file=<path>::
|
||||||
|
|
||||||
|
Use `<path>` to lookup and store credentials. The file will have its
|
||||||
|
filesystem permissions set to prevent other users on the system
|
||||||
|
from reading it, but it will not be encrypted or otherwise
|
||||||
|
protected. If not specified, credentials will be searched for from
|
||||||
|
`~/.git-credentials` and `$XDG_CONFIG_HOME/git/credentials`, and
|
||||||
|
credentials will be written to `~/.git-credentials` if it exists, or
|
||||||
|
`$XDG_CONFIG_HOME/git/credentials` if it exists and the former does
|
||||||
|
not. See also <<FILES>>.
|
||||||
|
|
||||||
|
[[FILES]]
|
||||||
|
FILES
|
||||||
|
-----
|
||||||
|
|
||||||
|
If not set explicitly with `--file`, there are two files where
|
||||||
|
git-credential-store will search for credentials in order of precedence:
|
||||||
|
|
||||||
|
~/.git-credentials::
|
||||||
|
User-specific credentials file.
|
||||||
|
|
||||||
|
$XDG_CONFIG_HOME/git/credentials::
|
||||||
|
Second user-specific credentials file. If '$XDG_CONFIG_HOME' is not set
|
||||||
|
or empty, `$HOME/.config/git/credentials` will be used. Any credentials
|
||||||
|
stored in this file will not be used if `~/.git-credentials` has a
|
||||||
|
matching credential as well. It is a good idea not to create this file
|
||||||
|
if you sometimes use older versions of Git that do not support it.
|
||||||
|
|
||||||
|
For credential lookups, the files are read in the order given above, with the
|
||||||
|
first matching credential found taking precedence over credentials found in
|
||||||
|
files further down the list.
|
||||||
|
|
||||||
|
Credential storage will by default write to the first existing file in the
|
||||||
|
list. If none of these files exist, `~/.git-credentials` will be created and
|
||||||
|
written to.
|
||||||
|
|
||||||
|
When erasing credentials, matching credentials will be erased from all files.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
The point of this helper is to reduce the number of times you must type
|
||||||
|
your username or password. For example:
|
||||||
|
|
||||||
|
------------------------------------------
|
||||||
|
$ git config credential.helper store
|
||||||
|
$ git push http://example.com/repo.git
|
||||||
|
Username: <type your username>
|
||||||
|
Password: <type your password>
|
||||||
|
|
||||||
|
[several days later]
|
||||||
|
$ git push http://example.com/repo.git
|
||||||
|
[your credentials are used automatically]
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
STORAGE FORMAT
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The `.git-credentials` file is stored in plaintext. Each credential is
|
||||||
|
stored on its own line as a URL like:
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
https://user:pass@example.com
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
No other kinds of lines (e.g. empty lines or comment lines) are
|
||||||
|
allowed in the file, even though some may be silently ignored. Do
|
||||||
|
not view or edit the file with editors.
|
||||||
|
|
||||||
|
When Git needs authentication for a particular URL context,
|
||||||
|
credential-store will consider that context a pattern to match against
|
||||||
|
each entry in the credentials file. If the protocol, hostname, and
|
||||||
|
username (if we already have one) match, then the password is returned
|
||||||
|
to Git. See the discussion of configuration in linkgit:gitcredentials[7]
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
294
app/src/main/assets/manpages/git-credential.txt
Normal file
294
app/src/main/assets/manpages/git-credential.txt
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
git-credential(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-credential - Retrieve and store user credentials
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
------------------
|
||||||
|
'git credential' (fill|approve|reject|capability)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Git has an internal interface for storing and retrieving credentials
|
||||||
|
from system-specific helpers, as well as prompting the user for
|
||||||
|
usernames and passwords. The git-credential command exposes this
|
||||||
|
interface to scripts which may want to retrieve, store, or prompt for
|
||||||
|
credentials in the same manner as Git. The design of this scriptable
|
||||||
|
interface models the internal C API; see credential.h for more
|
||||||
|
background on the concepts.
|
||||||
|
|
||||||
|
git-credential takes an "action" option on the command-line (one of
|
||||||
|
`fill`, `approve`, or `reject`) and reads a credential description
|
||||||
|
on stdin (see <<IOFMT,INPUT/OUTPUT FORMAT>>).
|
||||||
|
|
||||||
|
If the action is `fill`, git-credential will attempt to add "username"
|
||||||
|
and "password" attributes to the description by reading config files,
|
||||||
|
by contacting any configured credential helpers, or by prompting the
|
||||||
|
user. The username and password attributes of the credential
|
||||||
|
description are then printed to stdout together with the attributes
|
||||||
|
already provided.
|
||||||
|
|
||||||
|
If the action is `approve`, git-credential will send the description
|
||||||
|
to any configured credential helpers, which may store the credential
|
||||||
|
for later use.
|
||||||
|
|
||||||
|
If the action is `reject`, git-credential will send the description to
|
||||||
|
any configured credential helpers, which may erase any stored
|
||||||
|
credentials matching the description.
|
||||||
|
|
||||||
|
If the action is `capability`, git-credential will announce any capabilities
|
||||||
|
it supports to standard output.
|
||||||
|
|
||||||
|
If the action is `approve` or `reject`, no output should be emitted.
|
||||||
|
|
||||||
|
TYPICAL USE OF GIT CREDENTIAL
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
An application using git-credential will typically use `git
|
||||||
|
credential` following these steps:
|
||||||
|
|
||||||
|
1. Generate a credential description based on the context.
|
||||||
|
+
|
||||||
|
For example, if we want a password for
|
||||||
|
`https://example.com/foo.git`, we might generate the following
|
||||||
|
credential description (don't forget the blank line at the end; it
|
||||||
|
tells `git credential` that the application finished feeding all the
|
||||||
|
information it has):
|
||||||
|
|
||||||
|
protocol=https
|
||||||
|
host=example.com
|
||||||
|
path=foo.git
|
||||||
|
|
||||||
|
2. Ask git-credential to give us a username and password for this
|
||||||
|
description. This is done by running `git credential fill`,
|
||||||
|
feeding the description from step (1) to its standard input. The complete
|
||||||
|
credential description (including the credential per se, i.e. the
|
||||||
|
login and password) will be produced on standard output, like:
|
||||||
|
|
||||||
|
protocol=https
|
||||||
|
host=example.com
|
||||||
|
username=bob
|
||||||
|
password=secr3t
|
||||||
|
+
|
||||||
|
In most cases, this means the attributes given in the input will be
|
||||||
|
repeated in the output, but Git may also modify the credential
|
||||||
|
description, for example by removing the `path` attribute when the
|
||||||
|
protocol is HTTP(s) and `credential.useHttpPath` is false.
|
||||||
|
+
|
||||||
|
If the `git credential` knew about the password, this step may
|
||||||
|
not have involved the user actually typing this password (the
|
||||||
|
user may have typed a password to unlock the keychain instead,
|
||||||
|
or no user interaction was done if the keychain was already
|
||||||
|
unlocked) before it returned `password=secr3t`.
|
||||||
|
|
||||||
|
3. Use the credential (e.g., access the URL with the username and
|
||||||
|
password from step (2)), and see if it's accepted.
|
||||||
|
|
||||||
|
4. Report on the success or failure of the password. If the
|
||||||
|
credential allowed the operation to complete successfully, then
|
||||||
|
it can be marked with an "approve" action to tell `git
|
||||||
|
credential` to reuse it in its next invocation. If the credential
|
||||||
|
was rejected during the operation, use the "reject" action so
|
||||||
|
that `git credential` will ask for a new password in its next
|
||||||
|
invocation. In either case, `git credential` should be fed with
|
||||||
|
the credential description obtained from step (2) (which also
|
||||||
|
contains the fields provided in step (1)).
|
||||||
|
|
||||||
|
[[IOFMT]]
|
||||||
|
INPUT/OUTPUT FORMAT
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
`git credential` reads and/or writes (depending on the action used)
|
||||||
|
credential information in its standard input/output. This information
|
||||||
|
can correspond either to keys for which `git credential` will obtain
|
||||||
|
the login information (e.g. host, protocol, path), or to the actual
|
||||||
|
credential data to be obtained (username/password).
|
||||||
|
|
||||||
|
The credential is split into a set of named attributes, with one
|
||||||
|
attribute per line. Each attribute is specified by a key-value pair,
|
||||||
|
separated by an `=` (equals) sign, followed by a newline.
|
||||||
|
|
||||||
|
The key may contain any bytes except `=`, newline, or NUL. The value may
|
||||||
|
contain any bytes except newline or NUL. A line, including the trailing
|
||||||
|
newline, may not exceed 65535 bytes in order to allow implementations to
|
||||||
|
parse efficiently.
|
||||||
|
|
||||||
|
Attributes with keys that end with C-style array brackets `[]` can have
|
||||||
|
multiple values. Each instance of a multi-valued attribute forms an
|
||||||
|
ordered list of values - the order of the repeated attributes defines
|
||||||
|
the order of the values. An empty multi-valued attribute (`key[]=\n`)
|
||||||
|
acts to clear any previous entries and reset the list.
|
||||||
|
|
||||||
|
In all cases, all bytes are treated as-is (i.e., there is no quoting,
|
||||||
|
and one cannot transmit a value with newline or NUL in it). The list of
|
||||||
|
attributes is terminated by a blank line or end-of-file.
|
||||||
|
|
||||||
|
Git understands the following attributes:
|
||||||
|
|
||||||
|
`protocol`::
|
||||||
|
|
||||||
|
The protocol over which the credential will be used (e.g.,
|
||||||
|
`https`).
|
||||||
|
|
||||||
|
`host`::
|
||||||
|
|
||||||
|
The remote hostname for a network credential. This includes
|
||||||
|
the port number if one was specified (e.g., "example.com:8088").
|
||||||
|
|
||||||
|
`path`::
|
||||||
|
|
||||||
|
The path with which the credential will be used. E.g., for
|
||||||
|
accessing a remote https repository, this will be the
|
||||||
|
repository's path on the server.
|
||||||
|
|
||||||
|
`username`::
|
||||||
|
|
||||||
|
The credential's username, if we already have one (e.g., from a
|
||||||
|
URL, the configuration, the user, or from a previously run helper).
|
||||||
|
|
||||||
|
`password`::
|
||||||
|
|
||||||
|
The credential's password, if we are asking it to be stored.
|
||||||
|
|
||||||
|
`password_expiry_utc`::
|
||||||
|
|
||||||
|
Generated passwords such as an OAuth access token may have an expiry date.
|
||||||
|
When reading credentials from helpers, `git credential fill` ignores expired
|
||||||
|
passwords. Represented as Unix time UTC, seconds since 1970.
|
||||||
|
|
||||||
|
`oauth_refresh_token`::
|
||||||
|
|
||||||
|
An OAuth refresh token may accompany a password that is an OAuth access
|
||||||
|
token. Helpers must treat this attribute as confidential like the password
|
||||||
|
attribute. Git itself has no special behaviour for this attribute.
|
||||||
|
|
||||||
|
`url`::
|
||||||
|
|
||||||
|
When this special attribute is read by `git credential`, the
|
||||||
|
value is parsed as a URL and treated as if its constituent parts
|
||||||
|
were read (e.g., `url=https://example.com` would behave as if
|
||||||
|
`protocol=https` and `host=example.com` had been provided). This
|
||||||
|
can help callers avoid parsing URLs themselves.
|
||||||
|
+
|
||||||
|
Note that specifying a protocol is mandatory and if the URL
|
||||||
|
doesn't specify a hostname (e.g., "cert:///path/to/file") the
|
||||||
|
credential will contain a hostname attribute whose value is an
|
||||||
|
empty string.
|
||||||
|
+
|
||||||
|
Components which are missing from the URL (e.g., there is no
|
||||||
|
username in the example above) will be left unset.
|
||||||
|
|
||||||
|
`authtype`::
|
||||||
|
This indicates that the authentication scheme in question should be used.
|
||||||
|
Common values for HTTP and HTTPS include `basic`, `bearer`, and `digest`,
|
||||||
|
although the latter is insecure and should not be used. If `credential`
|
||||||
|
is used, this may be set to an arbitrary string suitable for the protocol in
|
||||||
|
question (usually HTTP).
|
||||||
|
+
|
||||||
|
This value should not be sent unless the appropriate capability (see below) is
|
||||||
|
provided on input.
|
||||||
|
|
||||||
|
`credential`::
|
||||||
|
The pre-encoded credential, suitable for the protocol in question (usually
|
||||||
|
HTTP). If this key is sent, `authtype` is mandatory, and `username` and
|
||||||
|
`password` are not used. For HTTP, Git concatenates the `authtype` value and
|
||||||
|
this value with a single space to determine the `Authorization` header.
|
||||||
|
+
|
||||||
|
This value should not be sent unless the appropriate capability (see below) is
|
||||||
|
provided on input.
|
||||||
|
|
||||||
|
`ephemeral`::
|
||||||
|
This boolean value indicates, if true, that the value in the `credential`
|
||||||
|
field should not be saved by the credential helper because its usefulness is
|
||||||
|
limited in time. For example, an HTTP Digest `credential` value is computed
|
||||||
|
using a nonce and reusing it will not result in successful authentication.
|
||||||
|
This may also be used for situations with short duration (e.g., 24-hour)
|
||||||
|
credentials. The default value is false.
|
||||||
|
+
|
||||||
|
The credential helper will still be invoked with `store` or `erase` so that it
|
||||||
|
can determine whether the operation was successful.
|
||||||
|
+
|
||||||
|
This value should not be sent unless the appropriate capability (see below) is
|
||||||
|
provided on input.
|
||||||
|
|
||||||
|
`state[]`::
|
||||||
|
This value provides an opaque state that will be passed back to this helper
|
||||||
|
if it is called again. Each different credential helper may specify this
|
||||||
|
once. The value should include a prefix unique to the credential helper and
|
||||||
|
should ignore values that don't match its prefix.
|
||||||
|
+
|
||||||
|
This value should not be sent unless the appropriate capability (see below) is
|
||||||
|
provided on input.
|
||||||
|
|
||||||
|
`continue`::
|
||||||
|
This is a boolean value, which, if enabled, indicates that this
|
||||||
|
authentication is a non-final part of a multistage authentication step. This
|
||||||
|
is common in protocols such as NTLM and Kerberos, where two rounds of client
|
||||||
|
authentication are required, and setting this flag allows the credential
|
||||||
|
helper to implement the multistage authentication step. This flag should
|
||||||
|
only be sent if a further stage is required; that is, if another round of
|
||||||
|
authentication is expected.
|
||||||
|
+
|
||||||
|
This value should not be sent unless the appropriate capability (see below) is
|
||||||
|
provided on input. This attribute is 'one-way' from a credential helper to
|
||||||
|
pass information to Git (or other programs invoking `git credential`).
|
||||||
|
|
||||||
|
`wwwauth[]`::
|
||||||
|
|
||||||
|
When an HTTP response is received by Git that includes one or more
|
||||||
|
'WWW-Authenticate' authentication headers, these will be passed by Git
|
||||||
|
to credential helpers.
|
||||||
|
+
|
||||||
|
Each 'WWW-Authenticate' header value is passed as a multi-valued
|
||||||
|
attribute 'wwwauth[]', where the order of the attributes is the same as
|
||||||
|
they appear in the HTTP response. This attribute is 'one-way' from Git
|
||||||
|
to pass additional information to credential helpers.
|
||||||
|
|
||||||
|
`capability[]`::
|
||||||
|
This signals that Git, or the helper, as appropriate, supports the capability
|
||||||
|
in question. This can be used to provide better, more specific data as part
|
||||||
|
of the protocol. A `capability[]` directive must precede any value depending
|
||||||
|
on it and these directives _should_ be the first item announced in the
|
||||||
|
protocol.
|
||||||
|
+
|
||||||
|
There are two currently supported capabilities. The first is `authtype`, which
|
||||||
|
indicates that the `authtype`, `credential`, and `ephemeral` values are
|
||||||
|
understood. The second is `state`, which indicates that the `state[]` and
|
||||||
|
`continue` values are understood.
|
||||||
|
+
|
||||||
|
It is not obligatory to use the additional features just because the capability
|
||||||
|
is supported, but they should not be provided without the capability.
|
||||||
|
|
||||||
|
Unrecognised attributes and capabilities are silently discarded.
|
||||||
|
|
||||||
|
[[CAPA-IOFMT]]
|
||||||
|
CAPABILITY INPUT/OUTPUT FORMAT
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
For `git credential capability`, the format is slightly different. First, a
|
||||||
|
`version 0` announcement is made to indicate the current version of the
|
||||||
|
protocol, and then each capability is announced with a line like `capability
|
||||||
|
authtype`. Credential helpers may also implement this format, again with the
|
||||||
|
`capability` argument. Additional lines may be added in the future; callers
|
||||||
|
should ignore lines which they don't understand.
|
||||||
|
|
||||||
|
Because this is a new part of the credential helper protocol, older versions of
|
||||||
|
Git, as well as some credential helpers, may not support it. If a non-zero
|
||||||
|
exit status is received, or if the first line doesn't start with the word
|
||||||
|
`version` and a space, callers should assume that no capabilities are supported.
|
||||||
|
|
||||||
|
The intention of this format is to differentiate it from the credential output
|
||||||
|
in an unambiguous way. It is possible to use very simple credential helpers
|
||||||
|
(e.g., inline shell scripts) which always produce identical output. Using a
|
||||||
|
distinct format allows users to continue to use this syntax without having to
|
||||||
|
worry about correctly implementing capability advertisements or accidentally
|
||||||
|
confusing callers querying for capabilities.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
118
app/src/main/assets/manpages/git-cvsexportcommit.txt
Normal file
118
app/src/main/assets/manpages/git-cvsexportcommit.txt
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
git-cvsexportcommit(1)
|
||||||
|
======================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-cvsexportcommit - Export a single commit to a CVS checkout
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git cvsexportcommit' [-h] [-u] [-v] [-c] [-P] [-p] [-a] [-d <cvsroot>]
|
||||||
|
[-w <cvs-workdir>] [-W] [-f] [-m <msgprefix>] [<parent-commit>] <commit-id>
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Exports a commit from Git to a CVS checkout, making it easier
|
||||||
|
to merge patches from a Git repository into a CVS repository.
|
||||||
|
|
||||||
|
Specify the name of a CVS checkout using the -w switch or execute it
|
||||||
|
from the root of the CVS working copy. In the latter case GIT_DIR must
|
||||||
|
be defined. See examples below.
|
||||||
|
|
||||||
|
It does its best to do the safe thing, it will check that the files are
|
||||||
|
unchanged and up to date in the CVS checkout, and it will not autocommit
|
||||||
|
by default.
|
||||||
|
|
||||||
|
Supports file additions, removals, and commits that affect binary files.
|
||||||
|
|
||||||
|
If the commit is a merge commit, you must tell 'git cvsexportcommit' what
|
||||||
|
parent the changeset should be done against.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
-c::
|
||||||
|
Commit automatically if the patch applied cleanly. It will not
|
||||||
|
commit if any hunks fail to apply or there were other problems.
|
||||||
|
|
||||||
|
-p::
|
||||||
|
Be pedantic (paranoid) when applying patches. Invokes patch with
|
||||||
|
--fuzz=0
|
||||||
|
|
||||||
|
-a::
|
||||||
|
Add authorship information. Adds Author line, and Committer (if
|
||||||
|
different from Author) to the message.
|
||||||
|
|
||||||
|
-d::
|
||||||
|
Set an alternative CVSROOT to use. This corresponds to the CVS
|
||||||
|
-d parameter. Usually users will not want to set this, except
|
||||||
|
if using CVS in an asymmetric fashion.
|
||||||
|
|
||||||
|
-f::
|
||||||
|
Force the merge even if the files are not up to date.
|
||||||
|
|
||||||
|
-P::
|
||||||
|
Force the parent commit, even if it is not a direct parent.
|
||||||
|
|
||||||
|
-m::
|
||||||
|
Prepend the commit message with the provided prefix.
|
||||||
|
Useful for patch series and the like.
|
||||||
|
|
||||||
|
-u::
|
||||||
|
Update affected files from CVS repository before attempting export.
|
||||||
|
|
||||||
|
-k::
|
||||||
|
Reverse CVS keyword expansion (e.g. $Revision: 1.2.3.4$
|
||||||
|
becomes $Revision$) in working CVS checkout before applying patch.
|
||||||
|
|
||||||
|
-w::
|
||||||
|
Specify the location of the CVS checkout to use for the export. This
|
||||||
|
option does not require GIT_DIR to be set before execution if the
|
||||||
|
current directory is within a Git repository. The default is the
|
||||||
|
value of 'cvsexportcommit.cvsdir'.
|
||||||
|
|
||||||
|
-W::
|
||||||
|
Tell cvsexportcommit that the current working directory is not only
|
||||||
|
a Git checkout, but also the CVS checkout. Therefore, Git will
|
||||||
|
reset the working directory to the parent commit before proceeding.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
Verbose.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
cvsexportcommit.cvsdir::
|
||||||
|
The default location of the CVS checkout to use for the export.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Merge one patch into CVS::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ export GIT_DIR=~/project/.git
|
||||||
|
$ cd ~/project_cvs_checkout
|
||||||
|
$ git cvsexportcommit -v <commit-sha1>
|
||||||
|
$ cvs commit -F .msg <files>
|
||||||
|
------------
|
||||||
|
|
||||||
|
Merge one patch into CVS (-c and -w options). The working directory is within the Git Repo::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git cvsexportcommit -v -c -w ~/project_cvs_checkout <commit-sha1>
|
||||||
|
------------
|
||||||
|
|
||||||
|
Merge pending patches into CVS automatically -- only if you really know what you are doing::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ export GIT_DIR=~/project/.git
|
||||||
|
$ cd ~/project_cvs_checkout
|
||||||
|
$ git cherry cvshead myhead | sed -n 's/^+ //p' | xargs -l1 git cvsexportcommit -c -p -v
|
||||||
|
------------
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
228
app/src/main/assets/manpages/git-cvsimport.txt
Normal file
228
app/src/main/assets/manpages/git-cvsimport.txt
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
git-cvsimport(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-cvsimport - Salvage your data out of another SCM people love to hate
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>]
|
||||||
|
[-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
|
||||||
|
[-C <git-repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
|
||||||
|
[-a] [-m] [-M <regex>] [-S <regex>] [-L <commit-limit>]
|
||||||
|
[-r <remote>] [-R] [<CVS-module>]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
*WARNING:* `git cvsimport` uses cvsps version 2, which is considered
|
||||||
|
deprecated; it does not work with cvsps version 3 and later. If you are
|
||||||
|
performing a one-shot import of a CVS repository consider using
|
||||||
|
http://cvs2svn.tigris.org/cvs2git.html[cvs2git] or
|
||||||
|
https://gitlab.com/esr/cvs-fast-export[cvs-fast-export].
|
||||||
|
|
||||||
|
Imports a CVS repository into Git. It will either create a new
|
||||||
|
repository, or incrementally import into an existing one.
|
||||||
|
|
||||||
|
Splitting the CVS log into patch sets is done by 'cvsps'.
|
||||||
|
At least version 2.1 is required.
|
||||||
|
|
||||||
|
*WARNING:* for certain situations the import leads to incorrect results.
|
||||||
|
Please see the section <<issues,ISSUES>> for further reference.
|
||||||
|
|
||||||
|
You should *never* do any work of your own on the branches that are
|
||||||
|
created by 'git cvsimport'. By default initial import will create and populate a
|
||||||
|
"master" branch from the CVS repository's main branch which you're free
|
||||||
|
to work with; after that, you need to 'git merge' incremental imports, or
|
||||||
|
any CVS branches, yourself. It is advisable to specify a named remote via
|
||||||
|
-r to separate and protect the incoming branches.
|
||||||
|
|
||||||
|
If you intend to set up a shared public repository that all developers can
|
||||||
|
read/write, or if you want to use linkgit:git-cvsserver[1], then you
|
||||||
|
probably want to make a bare clone of the imported repository,
|
||||||
|
and use the clone as the shared repository.
|
||||||
|
See linkgit:gitcvs-migration[7].
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-v::
|
||||||
|
Verbosity: let 'cvsimport' report what it is doing.
|
||||||
|
|
||||||
|
-d <CVSROOT>::
|
||||||
|
The root of the CVS archive. May be local (a simple path) or remote;
|
||||||
|
currently, only the :local:, :ext: and :pserver: access methods
|
||||||
|
are supported. If not given, 'git cvsimport' will try to read it
|
||||||
|
from `CVS/Root`. If no such file exists, it checks for the
|
||||||
|
`CVSROOT` environment variable.
|
||||||
|
|
||||||
|
<CVS-module>::
|
||||||
|
The CVS module you want to import. Relative to <CVSROOT>.
|
||||||
|
If not given, 'git cvsimport' tries to read it from
|
||||||
|
`CVS/Repository`.
|
||||||
|
|
||||||
|
-C <target-dir>::
|
||||||
|
The Git repository to import to. If the directory doesn't
|
||||||
|
exist, it will be created. Default is the current directory.
|
||||||
|
|
||||||
|
-r <remote>::
|
||||||
|
The Git remote to import this CVS repository into.
|
||||||
|
Moves all CVS branches into remotes/<remote>/<branch>
|
||||||
|
akin to the way 'git clone' uses 'origin' by default.
|
||||||
|
|
||||||
|
-o <branch-for-HEAD>::
|
||||||
|
When no remote is specified (via -r) the `HEAD` branch
|
||||||
|
from CVS is imported to the 'origin' branch within the Git
|
||||||
|
repository, as `HEAD` already has a special meaning for Git.
|
||||||
|
When a remote is specified the `HEAD` branch is named
|
||||||
|
remotes/<remote>/master mirroring 'git clone' behaviour.
|
||||||
|
Use this option if you want to import into a different
|
||||||
|
branch.
|
||||||
|
+
|
||||||
|
Use '-o master' for continuing an import that was initially done by
|
||||||
|
the old cvs2git tool.
|
||||||
|
|
||||||
|
-i::
|
||||||
|
Import-only: don't perform a checkout after importing. This option
|
||||||
|
ensures the working directory and index remain untouched and will
|
||||||
|
not create them if they do not exist.
|
||||||
|
|
||||||
|
-k::
|
||||||
|
Kill keywords: will extract files with '-kk' from the CVS archive
|
||||||
|
to avoid noisy changesets. Highly recommended, but off by default
|
||||||
|
to preserve compatibility with early imported trees.
|
||||||
|
|
||||||
|
-u::
|
||||||
|
Convert underscores in tag and branch names to dots.
|
||||||
|
|
||||||
|
-s <subst>::
|
||||||
|
Substitute the character "/" in branch names with <subst>
|
||||||
|
|
||||||
|
-p <options-for-cvsps>::
|
||||||
|
Additional options for cvsps.
|
||||||
|
The options `-u` and '-A' are implicit and should not be used here.
|
||||||
|
+
|
||||||
|
If you need to pass multiple options, separate them with a comma.
|
||||||
|
|
||||||
|
-z <fuzz>::
|
||||||
|
Pass the timestamp fuzz factor to cvsps, in seconds. If unset,
|
||||||
|
cvsps defaults to 300s.
|
||||||
|
|
||||||
|
-P <cvsps-output-file>::
|
||||||
|
Instead of calling cvsps, read the provided cvsps output file. Useful
|
||||||
|
for debugging or when cvsps is being handled outside cvsimport.
|
||||||
|
|
||||||
|
-m::
|
||||||
|
Attempt to detect merges based on the commit message. This option
|
||||||
|
will enable default regexes that try to capture the source
|
||||||
|
branch name from the commit message.
|
||||||
|
|
||||||
|
-M <regex>::
|
||||||
|
Attempt to detect merges based on the commit message with a custom
|
||||||
|
regex. It can be used with `-m` to enable the default regexes
|
||||||
|
as well. You must escape forward slashes.
|
||||||
|
+
|
||||||
|
The regex must capture the source branch name in $1.
|
||||||
|
+
|
||||||
|
This option can be used several times to provide several detection regexes.
|
||||||
|
|
||||||
|
-S <regex>::
|
||||||
|
Skip paths matching the regex.
|
||||||
|
|
||||||
|
-a::
|
||||||
|
Import all commits, including recent ones. cvsimport by default
|
||||||
|
skips commits that have a timestamp less than 10 minutes ago.
|
||||||
|
|
||||||
|
-L <limit>::
|
||||||
|
Limit the number of commits imported. Workaround for cases where
|
||||||
|
cvsimport leaks memory.
|
||||||
|
|
||||||
|
-A <author-conv-file>::
|
||||||
|
CVS by default uses the Unix username when writing its
|
||||||
|
commit logs. Using this option and an author-conv-file
|
||||||
|
maps the name recorded in CVS to author name, e-mail and
|
||||||
|
optional time zone:
|
||||||
|
+
|
||||||
|
---------
|
||||||
|
exon=Andreas Ericsson <ae@op5.se>
|
||||||
|
spawn=Simon Pawn <spawn@frog-pond.org> America/Chicago
|
||||||
|
|
||||||
|
---------
|
||||||
|
+
|
||||||
|
'git cvsimport' will make it appear as those authors had
|
||||||
|
their GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL set properly
|
||||||
|
all along. If a time zone is specified, GIT_AUTHOR_DATE will
|
||||||
|
have the corresponding offset applied.
|
||||||
|
+
|
||||||
|
For convenience, this data is saved to `$GIT_DIR/cvs-authors`
|
||||||
|
each time the '-A' option is provided and read from that same
|
||||||
|
file each time 'git cvsimport' is run.
|
||||||
|
+
|
||||||
|
It is not recommended to use this feature if you intend to
|
||||||
|
export changes back to CVS again later with
|
||||||
|
'git cvsexportcommit'.
|
||||||
|
|
||||||
|
-R::
|
||||||
|
Generate a `$GIT_DIR/cvs-revisions` file containing a mapping from CVS
|
||||||
|
revision numbers to newly-created Git commit IDs. The generated file
|
||||||
|
will contain one line for each (filename, revision) pair imported;
|
||||||
|
each line will look like
|
||||||
|
+
|
||||||
|
---------
|
||||||
|
src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7
|
||||||
|
---------
|
||||||
|
+
|
||||||
|
The revision data is appended to the file if it already exists, for use when
|
||||||
|
doing incremental imports.
|
||||||
|
+
|
||||||
|
This option may be useful if you have CVS revision numbers stored in commit
|
||||||
|
messages, bug-tracking systems, email archives, and the like.
|
||||||
|
|
||||||
|
-h::
|
||||||
|
Print a short usage message and exit.
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
If `-v` is specified, the script reports what it is doing.
|
||||||
|
|
||||||
|
Otherwise, success is indicated the Unix way, i.e. by simply exiting with
|
||||||
|
a zero exit status.
|
||||||
|
|
||||||
|
[[issues]]
|
||||||
|
ISSUES
|
||||||
|
------
|
||||||
|
Problems related to timestamps:
|
||||||
|
|
||||||
|
* If timestamps of commits in the CVS repository are not stable enough
|
||||||
|
to be used for ordering commits changes may show up in the wrong
|
||||||
|
order.
|
||||||
|
* If any files were ever "cvs import"ed more than once (e.g., import of
|
||||||
|
more than one vendor release) the HEAD contains the wrong content.
|
||||||
|
* If the timestamp order of different files cross the revision order
|
||||||
|
within the commit matching time window the order of commits may be
|
||||||
|
wrong.
|
||||||
|
|
||||||
|
Problems related to branches:
|
||||||
|
|
||||||
|
* Branches on which no commits have been made are not imported.
|
||||||
|
* All files from the branching point are added to a branch even if
|
||||||
|
never added in CVS.
|
||||||
|
* This applies to files added to the source branch *after* a daughter
|
||||||
|
branch was created: if previously no commit was made on the daughter
|
||||||
|
branch they will erroneously be added to the daughter branch in git.
|
||||||
|
|
||||||
|
Problems related to tags:
|
||||||
|
|
||||||
|
* Multiple tags on the same revision are not imported.
|
||||||
|
|
||||||
|
If you suspect that any of these issues may apply to the repository you
|
||||||
|
want to import, consider using cvs2git:
|
||||||
|
|
||||||
|
* cvs2git (part of cvs2svn), `https://subversion.apache.org/`
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
437
app/src/main/assets/manpages/git-cvsserver.txt
Normal file
437
app/src/main/assets/manpages/git-cvsserver.txt
Normal file
@@ -0,0 +1,437 @@
|
|||||||
|
git-cvsserver(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-cvsserver - A CVS server emulator for Git
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
|
||||||
|
SSH:
|
||||||
|
|
||||||
|
[verse]
|
||||||
|
export CVS_SERVER="git cvsserver"
|
||||||
|
'cvs' -d :ext:user@server/path/repo.git co <HEAD_name>
|
||||||
|
|
||||||
|
pserver (/etc/inetd.conf):
|
||||||
|
|
||||||
|
[verse]
|
||||||
|
cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
[verse]
|
||||||
|
'git-cvsserver' [<options>] [pserver|server] [<directory> ...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This application is a CVS emulation layer for Git.
|
||||||
|
|
||||||
|
It is highly functional. However, not all methods are implemented,
|
||||||
|
and for those methods that are implemented,
|
||||||
|
not all switches are implemented.
|
||||||
|
|
||||||
|
Testing has been done using both the CLI CVS client, and the Eclipse CVS
|
||||||
|
plugin. Most functionality works fine with both of these clients.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
All these options obviously only make sense if enforced by the server side.
|
||||||
|
They have been implemented to resemble the linkgit:git-daemon[1] options as
|
||||||
|
closely as possible.
|
||||||
|
|
||||||
|
--base-path <path>::
|
||||||
|
Prepend 'path' to requested CVSROOT
|
||||||
|
|
||||||
|
--strict-paths::
|
||||||
|
Don't allow recursing into subdirectories
|
||||||
|
|
||||||
|
--export-all::
|
||||||
|
Don't check for `gitcvs.enabled` in config. You also have to specify a list
|
||||||
|
of allowed directories (see below) if you want to use this option.
|
||||||
|
|
||||||
|
-V::
|
||||||
|
--version::
|
||||||
|
Print version information and exit
|
||||||
|
|
||||||
|
-h::
|
||||||
|
-H::
|
||||||
|
--help::
|
||||||
|
Print usage information and exit
|
||||||
|
|
||||||
|
<directory>::
|
||||||
|
The remaining arguments provide a list of directories. If no directories
|
||||||
|
are given, then all are allowed. Repositories within these directories
|
||||||
|
still require the `gitcvs.enabled` config option, unless `--export-all`
|
||||||
|
is specified.
|
||||||
|
|
||||||
|
LIMITATIONS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
CVS clients cannot tag, branch or perform Git merges.
|
||||||
|
|
||||||
|
'git-cvsserver' maps Git branches to CVS modules. This is very different
|
||||||
|
from what most CVS users would expect since in CVS modules usually represent
|
||||||
|
one or more directories.
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
------------
|
||||||
|
|
||||||
|
1. If you are going to offer CVS access via pserver, add a line in
|
||||||
|
/etc/inetd.conf like
|
||||||
|
+
|
||||||
|
--
|
||||||
|
------
|
||||||
|
cvspserver stream tcp nowait nobody git-cvsserver pserver
|
||||||
|
|
||||||
|
------
|
||||||
|
Note: Some inetd servers let you specify the name of the executable
|
||||||
|
independently of the value of argv[0] (i.e. the name the program assumes
|
||||||
|
it was executed with). In this case the correct line in /etc/inetd.conf
|
||||||
|
looks like
|
||||||
|
|
||||||
|
------
|
||||||
|
cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
Only anonymous access is provided by pserver by default. To commit you
|
||||||
|
will have to create pserver accounts, simply add a gitcvs.authdb
|
||||||
|
setting in the config file of the repositories you want the cvsserver
|
||||||
|
to allow writes to, for example:
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
[gitcvs]
|
||||||
|
authdb = /etc/cvsserver/passwd
|
||||||
|
|
||||||
|
------
|
||||||
|
The format of these files is username followed by the encrypted password,
|
||||||
|
for example:
|
||||||
|
|
||||||
|
------
|
||||||
|
myuser:sqkNi8zPf01HI
|
||||||
|
myuser:$1$9K7FzU28$VfF6EoPYCJEYcVQwATgOP/
|
||||||
|
myuser:$5$.NqmNH1vwfzGpV8B$znZIcumu1tNLATgV2l6e1/mY8RzhUDHMOaVOeL1cxV3
|
||||||
|
------
|
||||||
|
You can use the 'htpasswd' facility that comes with Apache to make these
|
||||||
|
files, but only with the -d option (or -B if your system supports it).
|
||||||
|
|
||||||
|
Preferably use the system specific utility that manages password hash
|
||||||
|
creation in your platform (e.g. mkpasswd in Linux, encrypt in OpenBSD or
|
||||||
|
pwhash in NetBSD) and paste it in the right location.
|
||||||
|
|
||||||
|
Then provide your password via the pserver method, for example:
|
||||||
|
|
||||||
|
------
|
||||||
|
cvs -d:pserver:someuser:somepassword@server:/path/repo.git co <HEAD_name>
|
||||||
|
------
|
||||||
|
|
||||||
|
No special setup is needed for SSH access, other than having Git tools
|
||||||
|
in the PATH. If you have clients that do not accept the CVS_SERVER
|
||||||
|
environment variable, you can rename 'git-cvsserver' to `cvs`.
|
||||||
|
|
||||||
|
Note: Newer CVS versions (>= 1.12.11) also support specifying
|
||||||
|
CVS_SERVER directly in CVSROOT like
|
||||||
|
|
||||||
|
------
|
||||||
|
cvs -d ":ext;CVS_SERVER=git cvsserver:user@server/path/repo.git" co <HEAD_name>
|
||||||
|
------
|
||||||
|
|
||||||
|
This has the advantage that it will be saved in your 'CVS/Root' files and
|
||||||
|
you don't need to worry about always setting the correct environment
|
||||||
|
variable. SSH users restricted to 'git-shell' don't need to override the default
|
||||||
|
with CVS_SERVER (and shouldn't) as 'git-shell' understands `cvs` to mean
|
||||||
|
'git-cvsserver' and pretends that the other end runs the real 'cvs' better.
|
||||||
|
--
|
||||||
|
2. For each repo that you want accessible from CVS you need to edit config in
|
||||||
|
the repo and add the following section.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
------
|
||||||
|
[gitcvs]
|
||||||
|
enabled=1
|
||||||
|
# optional for debugging
|
||||||
|
logFile=/path/to/logfile
|
||||||
|
|
||||||
|
------
|
||||||
|
Note: you need to ensure each user that is going to invoke 'git-cvsserver' has
|
||||||
|
write access to the log file and to the database (see
|
||||||
|
<<dbbackend,Database Backend>>. If you want to offer write access over
|
||||||
|
SSH, the users of course also need write access to the Git repository itself.
|
||||||
|
|
||||||
|
You also need to ensure that each repository is "bare" (without a Git index
|
||||||
|
file) for `cvs commit` to work. See linkgit:gitcvs-migration[7].
|
||||||
|
|
||||||
|
[[configaccessmethod]]
|
||||||
|
All configuration variables can also be overridden for a specific method of
|
||||||
|
access. Valid method names are "ext" (for SSH access) and "pserver". The
|
||||||
|
following example configuration would disable pserver access while still
|
||||||
|
allowing access over SSH.
|
||||||
|
|
||||||
|
------
|
||||||
|
[gitcvs]
|
||||||
|
enabled=0
|
||||||
|
|
||||||
|
[gitcvs "ext"]
|
||||||
|
enabled=1
|
||||||
|
------
|
||||||
|
--
|
||||||
|
3. If you didn't specify the CVSROOT/CVS_SERVER directly in the checkout command,
|
||||||
|
automatically saving it in your 'CVS/Root' files, then you need to set them
|
||||||
|
explicitly in your environment. CVSROOT should be set as per normal, but the
|
||||||
|
directory should point at the appropriate Git repo. As above, for SSH clients
|
||||||
|
_not_ restricted to 'git-shell', CVS_SERVER should be set to 'git-cvsserver'.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
------
|
||||||
|
export CVSROOT=:ext:user@server:/var/git/project.git
|
||||||
|
export CVS_SERVER="git cvsserver"
|
||||||
|
------
|
||||||
|
--
|
||||||
|
4. For SSH clients that will make commits, make sure their server-side
|
||||||
|
.ssh/environment files (or .bashrc, etc., according to their specific shell)
|
||||||
|
export appropriate values for GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL,
|
||||||
|
GIT_COMMITTER_NAME, and GIT_COMMITTER_EMAIL. For SSH clients whose login
|
||||||
|
shell is bash, .bashrc may be a reasonable alternative.
|
||||||
|
|
||||||
|
5. Clients should now be able to check out the project. Use the CVS 'module'
|
||||||
|
name to indicate what Git 'head' you want to check out. This also sets the
|
||||||
|
name of your newly checked-out directory, unless you tell it otherwise with
|
||||||
|
`-d <dir-name>`. For example, this checks out 'master' branch to the
|
||||||
|
`project-master` directory:
|
||||||
|
+
|
||||||
|
------
|
||||||
|
cvs co -d project-master master
|
||||||
|
------
|
||||||
|
|
||||||
|
[[dbbackend]]
|
||||||
|
DATABASE BACKEND
|
||||||
|
----------------
|
||||||
|
|
||||||
|
'git-cvsserver' uses one database per Git head (i.e. CVS module) to
|
||||||
|
store information about the repository to maintain consistent
|
||||||
|
CVS revision numbers. The database needs to be
|
||||||
|
updated (i.e. written to) after every commit.
|
||||||
|
|
||||||
|
If the commit is done directly by using `git` (as opposed to
|
||||||
|
using 'git-cvsserver') the update will need to happen on the
|
||||||
|
next repository access by 'git-cvsserver', independent of
|
||||||
|
access method and requested operation.
|
||||||
|
|
||||||
|
That means that even if you offer only read access (e.g. by using
|
||||||
|
the pserver method), 'git-cvsserver' should have write access to
|
||||||
|
the database to work reliably (otherwise you need to make sure
|
||||||
|
that the database is up to date any time 'git-cvsserver' is executed).
|
||||||
|
|
||||||
|
By default it uses SQLite databases in the Git directory, named
|
||||||
|
`gitcvs.<module-name>.sqlite`. Note that the SQLite backend creates
|
||||||
|
temporary files in the same directory as the database file on
|
||||||
|
write so it might not be enough to grant the users using
|
||||||
|
'git-cvsserver' write access to the database file without granting
|
||||||
|
them write access to the directory, too.
|
||||||
|
|
||||||
|
The database cannot be reliably regenerated in a
|
||||||
|
consistent form after the branch it is tracking has changed.
|
||||||
|
Example: For merged branches, 'git-cvsserver' only tracks
|
||||||
|
one branch of development, and after a 'git merge' an
|
||||||
|
incrementally updated database may track a different branch
|
||||||
|
than a database regenerated from scratch, causing inconsistent
|
||||||
|
CVS revision numbers. `git-cvsserver` has no way of knowing which
|
||||||
|
branch it would have picked if it had been run incrementally
|
||||||
|
pre-merge. So if you have to fully or partially (from old
|
||||||
|
backup) regenerate the database, you should be suspicious
|
||||||
|
of pre-existing CVS sandboxes.
|
||||||
|
|
||||||
|
You can configure the database backend with the following
|
||||||
|
configuration variables:
|
||||||
|
|
||||||
|
Configuring database backend
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
'git-cvsserver' uses the Perl DBI module. Please also read
|
||||||
|
its documentation if changing these variables, especially
|
||||||
|
about `DBI->connect()`.
|
||||||
|
|
||||||
|
gitcvs.dbName::
|
||||||
|
Database name. The exact meaning depends on the
|
||||||
|
selected database driver, for SQLite this is a filename.
|
||||||
|
Supports variable substitution (see below). May
|
||||||
|
not contain semicolons (`;`).
|
||||||
|
Default: '%Ggitcvs.%m.sqlite'
|
||||||
|
|
||||||
|
gitcvs.dbDriver::
|
||||||
|
Used DBI driver. You can specify any available driver
|
||||||
|
for this here, but it might not work. cvsserver is tested
|
||||||
|
with 'DBD::SQLite', reported to work with
|
||||||
|
'DBD::Pg', and reported *not* to work with 'DBD::mysql'.
|
||||||
|
Please regard this as an experimental feature. May not
|
||||||
|
contain colons (`:`).
|
||||||
|
Default: 'SQLite'
|
||||||
|
|
||||||
|
gitcvs.dbuser::
|
||||||
|
Database user. Only useful if setting `dbDriver`, since
|
||||||
|
SQLite has no concept of database users. Supports variable
|
||||||
|
substitution (see below).
|
||||||
|
|
||||||
|
gitcvs.dbPass::
|
||||||
|
Database password. Only useful if setting `dbDriver`, since
|
||||||
|
SQLite has no concept of database passwords.
|
||||||
|
|
||||||
|
gitcvs.dbTableNamePrefix::
|
||||||
|
Database table name prefix. Supports variable substitution
|
||||||
|
(see below). Any non-alphabetic characters will be replaced
|
||||||
|
with underscores.
|
||||||
|
|
||||||
|
All variables can also be set per access method, see <<configaccessmethod,above>>.
|
||||||
|
|
||||||
|
Variable substitution
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
In `dbDriver` and `dbUser` you can use the following variables:
|
||||||
|
|
||||||
|
%G::
|
||||||
|
Git directory name
|
||||||
|
%g::
|
||||||
|
Git directory name, where all characters except for
|
||||||
|
alphanumeric ones, `.`, and `-` are replaced with
|
||||||
|
`_` (this should make it easier to use the directory
|
||||||
|
name in a filename if wanted)
|
||||||
|
%m::
|
||||||
|
CVS module/Git head name
|
||||||
|
%a::
|
||||||
|
access method (one of "ext" or "pserver")
|
||||||
|
%u::
|
||||||
|
Name of the user running 'git-cvsserver'.
|
||||||
|
If no name can be determined, the
|
||||||
|
numeric uid is used.
|
||||||
|
|
||||||
|
ENVIRONMENT
|
||||||
|
-----------
|
||||||
|
|
||||||
|
These variables obviate the need for command-line options in some
|
||||||
|
circumstances, allowing easier restricted usage through git-shell.
|
||||||
|
|
||||||
|
GIT_CVSSERVER_BASE_PATH::
|
||||||
|
This variable replaces the argument to --base-path.
|
||||||
|
|
||||||
|
GIT_CVSSERVER_ROOT::
|
||||||
|
This variable specifies a single directory, replacing the
|
||||||
|
`<directory>...` argument list. The repository still requires the
|
||||||
|
`gitcvs.enabled` config option, unless `--export-all` is specified.
|
||||||
|
|
||||||
|
When these environment variables are set, the corresponding
|
||||||
|
command-line arguments may not be used.
|
||||||
|
|
||||||
|
ECLIPSE CVS CLIENT NOTES
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
To get a checkout with the Eclipse CVS client:
|
||||||
|
|
||||||
|
1. Select "Create a new project -> From CVS checkout"
|
||||||
|
2. Create a new location. See the notes below for details on how to choose the
|
||||||
|
right protocol.
|
||||||
|
3. Browse the 'modules' available. It will give you a list of the heads in
|
||||||
|
the repository. You will not be able to browse the tree from there. Only
|
||||||
|
the heads.
|
||||||
|
4. Pick `HEAD` when it asks what branch/tag to check out. Untick the
|
||||||
|
"launch commit wizard" to avoid committing the .project file.
|
||||||
|
|
||||||
|
Protocol notes: If you are using anonymous access via pserver, just select that.
|
||||||
|
Those using SSH access should choose the 'ext' protocol, and configure 'ext'
|
||||||
|
access on the Preferences->Team->CVS->ExtConnection pane. Set CVS_SERVER to
|
||||||
|
"`git cvsserver`". Note that password support is not good when using 'ext',
|
||||||
|
you will definitely want to have SSH keys setup.
|
||||||
|
|
||||||
|
Alternatively, you can just use the non-standard extssh protocol that Eclipse
|
||||||
|
offer. In that case CVS_SERVER is ignored, and you will have to replace
|
||||||
|
the cvs utility on the server with 'git-cvsserver' or manipulate your `.bashrc`
|
||||||
|
so that calling 'cvs' effectively calls 'git-cvsserver'.
|
||||||
|
|
||||||
|
CLIENTS KNOWN TO WORK
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
- CVS 1.12.9 on Debian
|
||||||
|
- CVS 1.11.17 on MacOSX (from Fink package)
|
||||||
|
- Eclipse 3.0, 3.1.2 on MacOSX (see Eclipse CVS Client Notes)
|
||||||
|
- TortoiseCVS
|
||||||
|
|
||||||
|
OPERATIONS SUPPORTED
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
All the operations required for normal use are supported, including
|
||||||
|
checkout, diff, status, update, log, add, remove, commit.
|
||||||
|
|
||||||
|
Most CVS command arguments that read CVS tags or revision numbers
|
||||||
|
(typically -r) work, and also support any git refspec
|
||||||
|
(tag, branch, commit ID, etc).
|
||||||
|
However, CVS revision numbers for non-default branches are not well
|
||||||
|
emulated, and cvs log does not show tags or branches at
|
||||||
|
all. (Non-main-branch CVS revision numbers superficially resemble CVS
|
||||||
|
revision numbers, but they actually encode a git commit ID directly,
|
||||||
|
rather than represent the number of revisions since the branch point.)
|
||||||
|
|
||||||
|
Note that there are two ways to checkout a particular branch.
|
||||||
|
As described elsewhere on this page, the "module" parameter
|
||||||
|
of cvs checkout is interpreted as a branch name, and it becomes
|
||||||
|
the main branch. It remains the main branch for a given sandbox
|
||||||
|
even if you temporarily make another branch sticky with
|
||||||
|
cvs update -r. Alternatively, the -r argument can indicate
|
||||||
|
some other branch to actually checkout, even though the module
|
||||||
|
is still the "main" branch. Tradeoffs (as currently
|
||||||
|
implemented): Each new "module" creates a new database on disk with
|
||||||
|
a history for the given module, and after the database is created,
|
||||||
|
operations against that main branch are fast. Or alternatively,
|
||||||
|
-r doesn't take any extra disk space, but may be significantly slower for
|
||||||
|
many operations, like cvs update.
|
||||||
|
|
||||||
|
If you want to refer to a git refspec that has characters that are
|
||||||
|
not allowed by CVS, you have two options. First, it may just work
|
||||||
|
to supply the git refspec directly to the appropriate CVS -r argument;
|
||||||
|
some CVS clients don't seem to do much sanity checking of the argument.
|
||||||
|
Second, if that fails, you can use a special character escape mechanism
|
||||||
|
that only uses characters that are valid in CVS tags. A sequence
|
||||||
|
of 4 or 5 characters of the form (underscore (`"_"`), dash (`"-"`),
|
||||||
|
one or two characters, and dash (`"-"`)) can encode various characters based
|
||||||
|
on the one or two letters: `"s"` for slash (`"/"`), `"p"` for
|
||||||
|
period (`"."`), `"u"` for underscore (`"_"`), or two hexadecimal digits
|
||||||
|
for any byte value at all (typically an ASCII number, or perhaps a part
|
||||||
|
of a UTF-8 encoded character).
|
||||||
|
|
||||||
|
Legacy monitoring operations are not supported (edit, watch and related).
|
||||||
|
Exports and tagging (tags and branches) are not supported at this stage.
|
||||||
|
|
||||||
|
CRLF Line Ending Conversions
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
By default the server leaves the `-k` mode blank for all files,
|
||||||
|
which causes the CVS client to treat them as a text files, subject
|
||||||
|
to end-of-line conversion on some platforms.
|
||||||
|
|
||||||
|
You can make the server use the end-of-line conversion attributes to
|
||||||
|
set the `-k` modes for files by setting the `gitcvs.usecrlfattr`
|
||||||
|
config variable. See linkgit:gitattributes[5] for more information
|
||||||
|
about end-of-line conversion.
|
||||||
|
|
||||||
|
Alternatively, if `gitcvs.usecrlfattr` config is not enabled
|
||||||
|
or the attributes do not allow automatic detection for a filename, then
|
||||||
|
the server uses the `gitcvs.allBinary` config for the default setting.
|
||||||
|
If `gitcvs.allBinary` is set, then file not otherwise
|
||||||
|
specified will default to '-kb' mode. Otherwise the `-k` mode
|
||||||
|
is left blank. But if `gitcvs.allBinary` is set to "guess", then
|
||||||
|
the correct `-k` mode will be guessed based on the contents of
|
||||||
|
the file.
|
||||||
|
|
||||||
|
For best consistency with 'cvs', it is probably best to override the
|
||||||
|
defaults by setting `gitcvs.usecrlfattr` to true,
|
||||||
|
and `gitcvs.allBinary` to "guess".
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
------------
|
||||||
|
'git-cvsserver' depends on DBD::SQLite.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
342
app/src/main/assets/manpages/git-daemon.txt
Normal file
342
app/src/main/assets/manpages/git-daemon.txt
Normal file
@@ -0,0 +1,342 @@
|
|||||||
|
git-daemon(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-daemon - A really simple server for Git repositories
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git daemon [--verbose] [--syslog] [--export-all]
|
||||||
|
[--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>]
|
||||||
|
[--strict-paths] [--base-path=<path>] [--base-path-relaxed]
|
||||||
|
[--user-path | --user-path=<path>]
|
||||||
|
[--interpolated-path=<pathtemplate>]
|
||||||
|
[--reuseaddr] [--detach] [--pid-file=<file>]
|
||||||
|
[--enable=<service>] [--disable=<service>]
|
||||||
|
[--allow-override=<service>] [--forbid-override=<service>]
|
||||||
|
[--access-hook=<path>] [--[no-]informative-errors]
|
||||||
|
[--inetd |
|
||||||
|
[--listen=<host-or-ipaddr>] [--port=<n>]
|
||||||
|
[--user=<user> [--group=<group>]]]
|
||||||
|
[--log-destination=(stderr|syslog|none)]
|
||||||
|
[<directory>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
A really simple TCP Git daemon that normally listens on port "DEFAULT_GIT_PORT"
|
||||||
|
aka 9418. It waits for a connection asking for a service, and will serve
|
||||||
|
that service if it is enabled.
|
||||||
|
|
||||||
|
It verifies that the directory has the magic file "git-daemon-export-ok", and
|
||||||
|
it will refuse to export any Git directory that hasn't explicitly been marked
|
||||||
|
for export this way (unless the `--export-all` parameter is specified). If you
|
||||||
|
pass some directory paths as `git daemon` arguments, the offers are limited to
|
||||||
|
repositories within those directories.
|
||||||
|
|
||||||
|
By default, only `upload-pack` service is enabled, which serves
|
||||||
|
`git fetch-pack` and `git ls-remote` clients, which are invoked
|
||||||
|
from `git fetch`, `git pull`, and `git clone`.
|
||||||
|
|
||||||
|
This is ideally suited for read-only updates, i.e., pulling from
|
||||||
|
Git repositories.
|
||||||
|
|
||||||
|
An `upload-archive` also exists to serve `git archive`.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`--strict-paths`::
|
||||||
|
Match paths exactly (i.e. don't allow "/foo/repo" when the real path is
|
||||||
|
"/foo/repo.git" or "/foo/repo/.git") and don't do user-relative paths.
|
||||||
|
`git daemon` will refuse to start when this option is enabled and no
|
||||||
|
directory arguments are provided.
|
||||||
|
|
||||||
|
`--base-path=<path>`::
|
||||||
|
Remap all the path requests as relative to the given path.
|
||||||
|
This is sort of "Git root" - if you run `git daemon` with
|
||||||
|
`--base-path=/srv/git` on `example.com`, then if you later try
|
||||||
|
to pull from `git://example.com/hello.git`, `git daemon` will
|
||||||
|
interpret the path as `/srv/git/hello.git`.
|
||||||
|
|
||||||
|
`--base-path-relaxed`::
|
||||||
|
If `--base-path` is enabled and repo lookup fails, with this option
|
||||||
|
`git daemon` will attempt to lookup without prefixing the base path.
|
||||||
|
This is useful for switching to `--base-path` usage, while still
|
||||||
|
allowing the old paths.
|
||||||
|
|
||||||
|
`--interpolated-path=<pathtemplate>`::
|
||||||
|
To support virtual hosting, an interpolated path template can be
|
||||||
|
used to dynamically construct alternate paths. The template
|
||||||
|
supports `%H` for the target hostname as supplied by the client but
|
||||||
|
converted to all lowercase, `%CH` for the canonical hostname,
|
||||||
|
`%IP` for the server's IP address, `%P` for the port number,
|
||||||
|
and `%D` for the absolute path of the named repository.
|
||||||
|
After interpolation, the path is validated against the directory
|
||||||
|
list.
|
||||||
|
|
||||||
|
`--export-all`::
|
||||||
|
Allow pulling from all directories that look like Git repositories
|
||||||
|
(have the 'objects' and 'refs' subdirectories), even if they
|
||||||
|
do not have the `git-daemon-export-ok` file.
|
||||||
|
|
||||||
|
`--inetd`::
|
||||||
|
Have the server run as an inetd service. Implies `--syslog` (may
|
||||||
|
be overridden with `--log-destination=`).
|
||||||
|
Incompatible with `--detach`, `--port`, `--listen`, `--user` and
|
||||||
|
`--group` options.
|
||||||
|
|
||||||
|
`--listen=<host-or-ipaddr>`::
|
||||||
|
Listen on a specific IP address or hostname. IP addresses can
|
||||||
|
be either an IPv4 address or an IPv6 address if supported. If IPv6
|
||||||
|
is not supported, then `--listen=<hostname>` is also not supported
|
||||||
|
and `--listen` must be given an IPv4 address.
|
||||||
|
Can be given more than once.
|
||||||
|
Incompatible with `--inetd` option.
|
||||||
|
|
||||||
|
`--port=<n>`::
|
||||||
|
Listen on an alternative port. Incompatible with `--inetd` option.
|
||||||
|
|
||||||
|
`--init-timeout=<n>`::
|
||||||
|
Timeout (in seconds) between the moment the connection is established
|
||||||
|
and the client request is received (typically a rather low value, since
|
||||||
|
that should be basically immediate).
|
||||||
|
|
||||||
|
`--timeout=<n>`::
|
||||||
|
Timeout (in seconds) for specific client sub-requests. This includes
|
||||||
|
the time it takes for the server to process the sub-request and the
|
||||||
|
time spent waiting for the next client's request.
|
||||||
|
|
||||||
|
`--max-connections=<n>`::
|
||||||
|
Maximum number of concurrent clients, defaults to 32. Set it to
|
||||||
|
zero for no limit.
|
||||||
|
|
||||||
|
`--syslog`::
|
||||||
|
Short for `--log-destination=syslog`.
|
||||||
|
|
||||||
|
`--log-destination=<destination>`::
|
||||||
|
Send log messages to the specified destination.
|
||||||
|
Note that this option does not imply `--verbose`,
|
||||||
|
thus by default only error conditions will be logged.
|
||||||
|
The _<destination>_ must be one of:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
`stderr`::
|
||||||
|
Write to standard error.
|
||||||
|
Note that if `--detach` is specified,
|
||||||
|
the process disconnects from the real standard error,
|
||||||
|
making this destination effectively equivalent to `none`.
|
||||||
|
`syslog`::
|
||||||
|
Write to syslog, using the `git-daemon` identifier.
|
||||||
|
`none`::
|
||||||
|
Disable all logging.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
The default destination is `syslog` if `--inetd` or `--detach` is specified,
|
||||||
|
otherwise `stderr`.
|
||||||
|
|
||||||
|
`--user-path`::
|
||||||
|
`--user-path=<path>`::
|
||||||
|
Allow {tilde}user notation to be used in requests. When
|
||||||
|
specified with no parameter, a request to
|
||||||
|
git://host/{tilde}alice/foo is taken as a request to access
|
||||||
|
'foo' repository in the home directory of user `alice`.
|
||||||
|
If `--user-path=<path>` is specified, the same request is
|
||||||
|
taken as a request to access `<path>/foo` repository in
|
||||||
|
the home directory of user `alice`.
|
||||||
|
|
||||||
|
`--verbose`::
|
||||||
|
Log details about the incoming connections and requested files.
|
||||||
|
|
||||||
|
`--reuseaddr`::
|
||||||
|
Use `SO_REUSEADDR` when binding the listening socket.
|
||||||
|
This allows the server to restart without waiting for
|
||||||
|
old connections to time out.
|
||||||
|
|
||||||
|
`--detach`::
|
||||||
|
Detach from the shell. Implies `--syslog`.
|
||||||
|
|
||||||
|
`--pid-file=<file>`::
|
||||||
|
Save the process id in _<file>_. Ignored when the daemon
|
||||||
|
is run under `--inetd`.
|
||||||
|
|
||||||
|
`--user=<user>`::
|
||||||
|
`--group=<group>`::
|
||||||
|
Change daemon's uid and gid before entering the service loop.
|
||||||
|
When only `--user` is given without `--group`, the
|
||||||
|
primary group ID for the user is used. The values of
|
||||||
|
the option are given to `getpwnam(3)` and `getgrnam(3)`
|
||||||
|
and numeric IDs are not supported.
|
||||||
|
+
|
||||||
|
Giving these options is an error when used with `--inetd`; use
|
||||||
|
the facility of inet daemon to achieve the same before spawning
|
||||||
|
`git daemon` if needed.
|
||||||
|
+
|
||||||
|
Like many programs that switch user id, the daemon does not reset
|
||||||
|
environment variables such as `HOME` when it runs git programs,
|
||||||
|
e.g. `upload-pack` and `receive-pack`. When using this option, you
|
||||||
|
may also want to set and export `HOME` to point at the home
|
||||||
|
directory of _<user>_ before starting the daemon, and make sure any
|
||||||
|
Git configuration files in that directory are readable by _<user>_.
|
||||||
|
|
||||||
|
`--enable=<service>`::
|
||||||
|
`--disable=<service>`::
|
||||||
|
Enable/disable the service site-wide per default. Note
|
||||||
|
that a service disabled site-wide can still be enabled
|
||||||
|
per repository if it is marked overridable and the
|
||||||
|
repository enables the service with a configuration
|
||||||
|
item.
|
||||||
|
|
||||||
|
`--allow-override=<service>`::
|
||||||
|
`--forbid-override=<service>`::
|
||||||
|
Allow/forbid overriding the site-wide default with per
|
||||||
|
repository configuration. By default, all the services
|
||||||
|
may be overridden.
|
||||||
|
|
||||||
|
`--informative-errors`::
|
||||||
|
`--no-informative-errors`::
|
||||||
|
When informative errors are turned on, git-daemon will report
|
||||||
|
more verbose errors to the client, differentiating conditions
|
||||||
|
like "no such repository" from "repository not exported". This
|
||||||
|
is more convenient for clients, but may leak information about
|
||||||
|
the existence of unexported repositories. When informative
|
||||||
|
errors are not enabled, all errors report "access denied" to the
|
||||||
|
client. The default is `--no-informative-errors`.
|
||||||
|
|
||||||
|
`--access-hook=<path>`::
|
||||||
|
Every time a client connects, first run an external command
|
||||||
|
specified by the <path> with service name (e.g. "upload-pack"),
|
||||||
|
path to the repository, hostname (`%H`), canonical hostname
|
||||||
|
(`%CH`), IP address (`%IP`), and TCP port (`%P`) as its command-line
|
||||||
|
arguments. The external command can decide to decline the
|
||||||
|
service by exiting with a non-zero status (or to allow it by
|
||||||
|
exiting with a zero status). It can also look at the $REMOTE_ADDR
|
||||||
|
and `$REMOTE_PORT` environment variables to learn about the
|
||||||
|
requestor when making this decision.
|
||||||
|
+
|
||||||
|
The external command can optionally write a single line to its
|
||||||
|
standard output to be sent to the requestor as an error message when
|
||||||
|
it declines the service.
|
||||||
|
|
||||||
|
_<directory>_::
|
||||||
|
The remaining arguments provide a list of directories. If any
|
||||||
|
directories are specified, then the `git-daemon` process will
|
||||||
|
serve a requested directory only if it is contained in one of
|
||||||
|
these directories. If `--strict-paths` is specified, then the
|
||||||
|
requested directory must match one of these directories exactly.
|
||||||
|
|
||||||
|
SERVICES
|
||||||
|
--------
|
||||||
|
|
||||||
|
These services can be globally enabled/disabled using the
|
||||||
|
command-line options of this command. If finer-grained
|
||||||
|
control is desired (e.g. to allow `git archive` to be run
|
||||||
|
against only in a few selected repositories the daemon serves),
|
||||||
|
the per-repository configuration file can be used to enable or
|
||||||
|
disable them.
|
||||||
|
|
||||||
|
upload-pack::
|
||||||
|
This serves `git fetch-pack` and `git ls-remote`
|
||||||
|
clients. It is enabled by default, but a repository can
|
||||||
|
disable it by setting `daemon.uploadpack` configuration
|
||||||
|
item to `false`.
|
||||||
|
|
||||||
|
upload-archive::
|
||||||
|
This serves `git archive --remote`. It is disabled by
|
||||||
|
default, but a repository can enable it by setting
|
||||||
|
`daemon.uploadarch` configuration item to `true`.
|
||||||
|
|
||||||
|
receive-pack::
|
||||||
|
This serves `git send-pack` clients, allowing anonymous
|
||||||
|
push. It is disabled by default, as there is _no_
|
||||||
|
authentication in the protocol (in other words, anybody
|
||||||
|
can push anything into the repository, including removal
|
||||||
|
of refs). This is solely meant for a closed LAN setting
|
||||||
|
where everybody is friendly. This service can be
|
||||||
|
enabled by setting `daemon.receivepack` configuration item to
|
||||||
|
`true`.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
We assume the following in /etc/services::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ grep 9418 /etc/services
|
||||||
|
git 9418/tcp # Git Version Control System
|
||||||
|
------------
|
||||||
|
|
||||||
|
'git daemon' as inetd server::
|
||||||
|
To set up 'git daemon' as an inetd service that handles any
|
||||||
|
repository within `/pub/foo` or `/pub/bar`, place an entry like
|
||||||
|
the following into `/etc/inetd` all on one line:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
git stream tcp nowait nobody /usr/bin/git
|
||||||
|
git daemon --inetd --verbose --export-all
|
||||||
|
/pub/foo /pub/bar
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
'git daemon' as inetd server for virtual hosts::
|
||||||
|
To set up 'git daemon' as an inetd service that handles
|
||||||
|
repositories for different virtual hosts, `www.example.com`
|
||||||
|
and `www.example.org`, place an entry like the following into
|
||||||
|
`/etc/inetd` all on one line:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
git stream tcp nowait nobody /usr/bin/git
|
||||||
|
git daemon --inetd --verbose --export-all
|
||||||
|
--interpolated-path=/pub/%H%D
|
||||||
|
/pub/www.example.org/software
|
||||||
|
/pub/www.example.com/software
|
||||||
|
/software
|
||||||
|
------------------------------------------------
|
||||||
|
+
|
||||||
|
In this example, the root-level directory `/pub` will contain
|
||||||
|
a subdirectory for each virtual host name supported.
|
||||||
|
Further, both hosts advertise repositories simply as
|
||||||
|
`git://www.example.com/software/repo.git`. For pre-1.4.0
|
||||||
|
clients, a symlink from `/software` into the appropriate
|
||||||
|
default repository could be made as well.
|
||||||
|
|
||||||
|
|
||||||
|
'git daemon' as regular daemon for virtual hosts::
|
||||||
|
To set up `git daemon` as a regular, non-inetd service that
|
||||||
|
handles repositories for multiple virtual hosts based on
|
||||||
|
their IP addresses, start the daemon like this:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
git daemon --verbose --export-all
|
||||||
|
--interpolated-path=/pub/%IP/%D
|
||||||
|
/pub/192.168.1.200/software
|
||||||
|
/pub/10.10.220.23/software
|
||||||
|
------------------------------------------------
|
||||||
|
+
|
||||||
|
In this example, the root-level directory `/pub` will contain
|
||||||
|
a subdirectory for each virtual host IP address supported.
|
||||||
|
Repositories can still be accessed by hostname though, assuming
|
||||||
|
they correspond to these IP addresses.
|
||||||
|
|
||||||
|
selectively enable/disable services per repository::
|
||||||
|
To enable `git archive --remote` and disable `git fetch` against
|
||||||
|
a repository, have the following in the configuration file in the
|
||||||
|
repository (that is the file 'config' next to `HEAD`, 'refs' and
|
||||||
|
'objects').
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
[daemon]
|
||||||
|
uploadpack = false
|
||||||
|
uploadarch = true
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
ENVIRONMENT
|
||||||
|
-----------
|
||||||
|
`git daemon` will set `REMOTE_ADDR` to the IP address of the client
|
||||||
|
that connected to it, if the IP address is available. `REMOTE_ADDR` will
|
||||||
|
be available in the environment of hooks called when
|
||||||
|
services are performed.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
211
app/src/main/assets/manpages/git-describe.txt
Normal file
211
app/src/main/assets/manpages/git-describe.txt
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
git-describe(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-describe - Give an object a human readable name based on an available ref
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]
|
||||||
|
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
|
||||||
|
'git describe' <blob>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
The command finds the most recent tag that is reachable from a
|
||||||
|
commit. If the tag points to the commit, then only the tag is
|
||||||
|
shown. Otherwise, it suffixes the tag name with the number of
|
||||||
|
additional commits on top of the tagged object and the
|
||||||
|
abbreviated object name of the most recent commit. The result
|
||||||
|
is a "human-readable" object name which can also be used to
|
||||||
|
identify the commit to other git commands.
|
||||||
|
|
||||||
|
By default (without --all or --tags) `git describe` only shows
|
||||||
|
annotated tags. For more information about creating annotated tags
|
||||||
|
see the -a and -s options to linkgit:git-tag[1].
|
||||||
|
|
||||||
|
If the given object refers to a blob, it will be described
|
||||||
|
as `<commit-ish>:<path>`, such that the blob can be found
|
||||||
|
at `<path>` in the `<commit-ish>`, which itself describes the
|
||||||
|
first commit in which this blob occurs in a reverse revision walk
|
||||||
|
from HEAD.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<commit-ish>...::
|
||||||
|
Commit-ish object names to describe. Defaults to HEAD if omitted.
|
||||||
|
|
||||||
|
--dirty[=<mark>]::
|
||||||
|
--broken[=<mark>]::
|
||||||
|
Describe the state of the working tree. When the working
|
||||||
|
tree matches HEAD, the output is the same as "git describe
|
||||||
|
HEAD". If the working tree has local modification "-dirty"
|
||||||
|
is appended to it. If a repository is corrupt and Git
|
||||||
|
cannot determine if there is local modification, Git will
|
||||||
|
error out, unless `--broken' is given, which appends
|
||||||
|
the suffix "-broken" instead.
|
||||||
|
|
||||||
|
--all::
|
||||||
|
Instead of using only the annotated tags, use any ref
|
||||||
|
found in `refs/` namespace. This option enables matching
|
||||||
|
any known branch, remote-tracking branch, or lightweight tag.
|
||||||
|
|
||||||
|
--tags::
|
||||||
|
Instead of using only the annotated tags, use any tag
|
||||||
|
found in `refs/tags` namespace. This option enables matching
|
||||||
|
a lightweight (non-annotated) tag.
|
||||||
|
|
||||||
|
--contains::
|
||||||
|
Instead of finding the tag that predates the commit, find
|
||||||
|
the tag that comes after the commit, and thus contains it.
|
||||||
|
Automatically implies --tags.
|
||||||
|
|
||||||
|
--abbrev=<n>::
|
||||||
|
Instead of using the default number of hexadecimal digits (which
|
||||||
|
will vary according to the number of objects in the repository with
|
||||||
|
a default of 7) of the abbreviated object name, use <n> digits, or
|
||||||
|
as many digits as needed to form a unique object name. An <n> of 0
|
||||||
|
will suppress long format, only showing the closest tag.
|
||||||
|
|
||||||
|
--candidates=<n>::
|
||||||
|
Instead of considering only the 10 most recent tags as
|
||||||
|
candidates to describe the input commit-ish consider
|
||||||
|
up to <n> candidates. Increasing <n> above 10 will take
|
||||||
|
slightly longer but may produce a more accurate result.
|
||||||
|
An <n> of 0 will cause only exact matches to be output.
|
||||||
|
|
||||||
|
--exact-match::
|
||||||
|
Only output exact matches (a tag directly references the
|
||||||
|
supplied commit). This is a synonym for --candidates=0.
|
||||||
|
|
||||||
|
--debug::
|
||||||
|
Verbosely display information about the searching strategy
|
||||||
|
being employed to standard error. The tag name will still
|
||||||
|
be printed to standard out.
|
||||||
|
|
||||||
|
--long::
|
||||||
|
Always output the long format (the tag, the number of commits
|
||||||
|
and the abbreviated commit name) even when it matches a tag.
|
||||||
|
This is useful when you want to see parts of the commit object name
|
||||||
|
in "describe" output, even when the commit in question happens to be
|
||||||
|
a tagged version. Instead of just emitting the tag name, it will
|
||||||
|
describe such a commit as v1.2-0-gdeadbee (0th commit since tag v1.2
|
||||||
|
that points at object deadbee....).
|
||||||
|
|
||||||
|
--match <pattern>::
|
||||||
|
Only consider tags matching the given `glob(7)` pattern,
|
||||||
|
excluding the "refs/tags/" prefix. If used with `--all`, it also
|
||||||
|
considers local branches and remote-tracking references matching the
|
||||||
|
pattern, excluding respectively "refs/heads/" and "refs/remotes/"
|
||||||
|
prefix; references of other types are never considered. If given
|
||||||
|
multiple times, a list of patterns will be accumulated, and tags
|
||||||
|
matching any of the patterns will be considered. Use `--no-match` to
|
||||||
|
clear and reset the list of patterns.
|
||||||
|
|
||||||
|
--exclude <pattern>::
|
||||||
|
Do not consider tags matching the given `glob(7)` pattern, excluding
|
||||||
|
the "refs/tags/" prefix. If used with `--all`, it also does not consider
|
||||||
|
local branches and remote-tracking references matching the pattern,
|
||||||
|
excluding respectively "refs/heads/" and "refs/remotes/" prefix;
|
||||||
|
references of other types are never considered. If given multiple times,
|
||||||
|
a list of patterns will be accumulated and tags matching any of the
|
||||||
|
patterns will be excluded. When combined with --match a tag will be
|
||||||
|
considered when it matches at least one --match pattern and does not
|
||||||
|
match any of the --exclude patterns. Use `--no-exclude` to clear and
|
||||||
|
reset the list of patterns.
|
||||||
|
|
||||||
|
--always::
|
||||||
|
Show uniquely abbreviated commit object as fallback.
|
||||||
|
|
||||||
|
--first-parent::
|
||||||
|
Follow only the first parent commit upon seeing a merge commit.
|
||||||
|
This is useful when you wish to not match tags on branches merged
|
||||||
|
in the history of the target commit.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
With something like git.git current tree, I get:
|
||||||
|
|
||||||
|
[torvalds@g5 git]$ git describe parent
|
||||||
|
v1.0.4-14-g2414721
|
||||||
|
|
||||||
|
i.e. the current head of my "parent" branch is based on v1.0.4,
|
||||||
|
but since it has a few commits on top of that,
|
||||||
|
describe has added the number of additional commits ("14") and
|
||||||
|
an abbreviated object name for the commit itself ("2414721")
|
||||||
|
at the end.
|
||||||
|
|
||||||
|
The number of additional commits is the number
|
||||||
|
of commits which would be displayed by "git log v1.0.4..parent".
|
||||||
|
The hash suffix is "-g" + an unambiguous abbreviation for the tip commit
|
||||||
|
of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`). The
|
||||||
|
length of the abbreviation scales as the repository grows, using the
|
||||||
|
approximate number of objects in the repository and a bit of math
|
||||||
|
around the birthday paradox, and defaults to a minimum of 7.
|
||||||
|
The "g" prefix stands for "git" and is used to allow describing the version of
|
||||||
|
a software depending on the SCM the software is managed with. This is useful
|
||||||
|
in an environment where people may use different SCMs.
|
||||||
|
|
||||||
|
Doing a 'git describe' on a tag-name will just show the tag name:
|
||||||
|
|
||||||
|
[torvalds@g5 git]$ git describe v1.0.4
|
||||||
|
v1.0.4
|
||||||
|
|
||||||
|
With --all, the command can use branch heads as references, so
|
||||||
|
the output shows the reference path as well:
|
||||||
|
|
||||||
|
[torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2
|
||||||
|
tags/v1.0.0-21-g975b
|
||||||
|
|
||||||
|
[torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^
|
||||||
|
heads/lt/describe-7-g975b
|
||||||
|
|
||||||
|
With --abbrev set to 0, the command can be used to find the
|
||||||
|
closest tagname without any suffix:
|
||||||
|
|
||||||
|
[torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2
|
||||||
|
tags/v1.0.0
|
||||||
|
|
||||||
|
Note that the suffix you get if you type these commands today may be
|
||||||
|
longer than what Linus saw above when he ran these commands, as your
|
||||||
|
Git repository may have new commits whose object names begin with
|
||||||
|
975b that did not exist back then, and "-g975b" suffix alone may not
|
||||||
|
be sufficient to disambiguate these commits.
|
||||||
|
|
||||||
|
|
||||||
|
SEARCH STRATEGY
|
||||||
|
---------------
|
||||||
|
|
||||||
|
For each commit-ish supplied, 'git describe' will first look for
|
||||||
|
a tag which tags exactly that commit. Annotated tags will always
|
||||||
|
be preferred over lightweight tags, and tags with newer dates will
|
||||||
|
always be preferred over tags with older dates. If an exact match
|
||||||
|
is found, its name will be output and searching will stop.
|
||||||
|
|
||||||
|
If an exact match was not found, 'git describe' will walk back
|
||||||
|
through the commit history to locate an ancestor commit which
|
||||||
|
has been tagged. The ancestor's tag will be output along with an
|
||||||
|
abbreviation of the input commit-ish's SHA-1. If `--first-parent` was
|
||||||
|
specified then the walk will only consider the first parent of each
|
||||||
|
commit.
|
||||||
|
|
||||||
|
If multiple tags were found during the walk then the tag which
|
||||||
|
has the fewest commits different from the input commit-ish will be
|
||||||
|
selected and output. Here fewest commits different is defined as
|
||||||
|
the number of commits which would be shown by `git log tag..input`
|
||||||
|
will be the smallest number of commits possible.
|
||||||
|
|
||||||
|
BUGS
|
||||||
|
----
|
||||||
|
|
||||||
|
Tree objects as well as tag objects not pointing at commits, cannot be described.
|
||||||
|
When describing blobs, the lightweight tags pointing at blobs are ignored,
|
||||||
|
but the blob is still described as <commit-ish>:<path> despite the lightweight
|
||||||
|
tag being favorable.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
65
app/src/main/assets/manpages/git-diagnose.txt
Normal file
65
app/src/main/assets/manpages/git-diagnose.txt
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
git-diagnose(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-diagnose - Generate a zip archive of diagnostic information
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git diagnose' [(-o | --output-directory) <path>] [(-s | --suffix) <format>]
|
||||||
|
[--mode=<mode>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Collects detailed information about the user's machine, Git client, and
|
||||||
|
repository state and packages that information into a zip archive. The
|
||||||
|
generated archive can then, for example, be shared with the Git mailing list to
|
||||||
|
help debug an issue or serve as a reference for independent debugging.
|
||||||
|
|
||||||
|
By default, the following information is captured in the archive:
|
||||||
|
|
||||||
|
* 'git version --build-options'
|
||||||
|
* The path to the repository root
|
||||||
|
* The available disk space on the filesystem
|
||||||
|
* The name and size of each packfile, including those in alternate object
|
||||||
|
stores
|
||||||
|
* The total count of loose objects, as well as counts broken down by
|
||||||
|
`.git/objects` subdirectory
|
||||||
|
|
||||||
|
Additional information can be collected by selecting a different diagnostic mode
|
||||||
|
using the `--mode` option.
|
||||||
|
|
||||||
|
This tool differs from linkgit:git-bugreport[1] in that it collects much more
|
||||||
|
detailed information with a greater focus on reporting the size and data shape
|
||||||
|
of repository contents.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-o <path>::
|
||||||
|
--output-directory <path>::
|
||||||
|
Place the resulting diagnostics archive in `<path>` instead of the
|
||||||
|
current directory.
|
||||||
|
|
||||||
|
-s <format>::
|
||||||
|
--suffix <format>::
|
||||||
|
Specify an alternate suffix for the diagnostics archive name, to create
|
||||||
|
a file named 'git-diagnostics-<formatted-suffix>'. This should take the
|
||||||
|
form of a strftime(3) format string; the current local time will be
|
||||||
|
used.
|
||||||
|
|
||||||
|
--mode=(stats|all)::
|
||||||
|
Specify the type of diagnostics that should be collected. The default behavior
|
||||||
|
of 'git diagnose' is equivalent to `--mode=stats`.
|
||||||
|
+
|
||||||
|
The `--mode=all` option collects everything included in `--mode=stats`, as well
|
||||||
|
as copies of `.git`, `.git/hooks`, `.git/info`, `.git/logs`, and
|
||||||
|
`.git/objects/info` directories. This additional information may be sensitive,
|
||||||
|
as it can be used to reconstruct the full contents of the diagnosed repository.
|
||||||
|
Users should exercise caution when sharing an archive generated with
|
||||||
|
`--mode=all`.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
52
app/src/main/assets/manpages/git-diff-files.txt
Normal file
52
app/src/main/assets/manpages/git-diff-files.txt
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
git-diff-files(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-diff-files - Compares files in the working tree and the index
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git diff-files' [-q] [-0 | -1 | -2 | -3 | -c | --cc] [<common-diff-options>] [<path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Compares the files in the working tree and the index. When paths
|
||||||
|
are specified, compares only those named paths. Otherwise all
|
||||||
|
entries in the index are compared. The output format is the
|
||||||
|
same as for 'git diff-index' and 'git diff-tree'.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
-1 --base::
|
||||||
|
-2 --ours::
|
||||||
|
-3 --theirs::
|
||||||
|
-0::
|
||||||
|
Diff against the "base" version, "our branch", or "their
|
||||||
|
branch" respectively. With these options, diffs for
|
||||||
|
merged entries are not shown.
|
||||||
|
+
|
||||||
|
The default is to diff against our branch (-2) and the
|
||||||
|
cleanly resolved paths. The option -0 can be given to
|
||||||
|
omit diff output for unmerged entries and just show "Unmerged".
|
||||||
|
|
||||||
|
-c::
|
||||||
|
--cc::
|
||||||
|
This compares stage 2 (our branch), stage 3 (their
|
||||||
|
branch), and the working tree file and outputs a combined
|
||||||
|
diff, similar to the way 'diff-tree' shows a merge
|
||||||
|
commit with these flags.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
Remain silent even for nonexistent files
|
||||||
|
|
||||||
|
|
||||||
|
include::diff-format.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
127
app/src/main/assets/manpages/git-diff-index.txt
Normal file
127
app/src/main/assets/manpages/git-diff-index.txt
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
git-diff-index(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-diff-index - Compare a tree to the working tree or index
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git diff-index' [-m] [--cached] [--merge-base] [<common-diff-options>] <tree-ish> [<path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Compare the content and mode of the blobs found in a tree object
|
||||||
|
with the corresponding tracked files in the working tree, or with the
|
||||||
|
corresponding paths in the index. When <path> arguments are present,
|
||||||
|
compare only paths matching those patterns. Otherwise all tracked
|
||||||
|
files are compared.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
<tree-ish>::
|
||||||
|
The id of a tree object to diff against.
|
||||||
|
|
||||||
|
--cached::
|
||||||
|
Do not consider the on-disk file at all.
|
||||||
|
|
||||||
|
--merge-base::
|
||||||
|
Instead of comparing <tree-ish> directly, use the merge base
|
||||||
|
between <tree-ish> and HEAD instead. <tree-ish> must be a
|
||||||
|
commit.
|
||||||
|
|
||||||
|
-m::
|
||||||
|
By default, files recorded in the index but not checked
|
||||||
|
out are reported as deleted. This flag makes
|
||||||
|
'git diff-index' say that all non-checked-out files are up
|
||||||
|
to date.
|
||||||
|
|
||||||
|
include::diff-format.adoc[]
|
||||||
|
|
||||||
|
OPERATING MODES
|
||||||
|
---------------
|
||||||
|
You can choose whether you want to trust the index file entirely
|
||||||
|
(using the `--cached` flag) or ask the diff logic to show any files
|
||||||
|
that don't match the stat state as being "tentatively changed". Both
|
||||||
|
of these operations are very useful indeed.
|
||||||
|
|
||||||
|
CACHED MODE
|
||||||
|
-----------
|
||||||
|
If `--cached` is specified, it allows you to ask:
|
||||||
|
|
||||||
|
show me the differences between HEAD and the current index
|
||||||
|
contents (the ones I'd write using 'git write-tree')
|
||||||
|
|
||||||
|
For example, let's say that you have worked on your working directory, updated
|
||||||
|
some files in the index and are ready to commit. You want to see exactly
|
||||||
|
*what* you are going to commit, without having to write a new tree
|
||||||
|
object and compare it that way, and to do that, you just do
|
||||||
|
|
||||||
|
git diff-index --cached HEAD
|
||||||
|
|
||||||
|
Example: let's say I had renamed `commit.c` to `git-commit.c`, and I had
|
||||||
|
done an `update-index` to make that effective in the index file.
|
||||||
|
`git diff-files` wouldn't show anything at all, since the index file
|
||||||
|
matches my working directory. But doing a 'git diff-index' does:
|
||||||
|
|
||||||
|
torvalds@ppc970:~/git> git diff-index --cached HEAD
|
||||||
|
:100644 000000 4161aecc6700a2eb579e842af0b7f22b98443f74 0000000000000000000000000000000000000000 D commit.c
|
||||||
|
:000000 100644 0000000000000000000000000000000000000000 4161aecc6700a2eb579e842af0b7f22b98443f74 A git-commit.c
|
||||||
|
|
||||||
|
You can see easily that the above is a rename.
|
||||||
|
|
||||||
|
In fact, `git diff-index --cached` *should* always be entirely equivalent to
|
||||||
|
actually doing a 'git write-tree' and comparing that. Except this one is much
|
||||||
|
nicer for the case where you just want to check where you are.
|
||||||
|
|
||||||
|
So doing a `git diff-index --cached` is basically very useful when you are
|
||||||
|
asking yourself "what have I already marked for being committed, and
|
||||||
|
what's the difference to a previous tree".
|
||||||
|
|
||||||
|
NON-CACHED MODE
|
||||||
|
---------------
|
||||||
|
The "non-cached" mode takes a different approach, and is potentially
|
||||||
|
the more useful of the two in that what it does can't be emulated with
|
||||||
|
a 'git write-tree' + 'git diff-tree'. Thus that's the default mode.
|
||||||
|
The non-cached version asks the question:
|
||||||
|
|
||||||
|
show me the differences between HEAD and the currently checked out
|
||||||
|
tree - index contents _and_ files that aren't up to date
|
||||||
|
|
||||||
|
which is obviously a very useful question too, since that tells you what
|
||||||
|
you *could* commit. Again, the output matches the 'git diff-tree -r'
|
||||||
|
output to a tee, but with a twist.
|
||||||
|
|
||||||
|
The twist is that if some file doesn't match the index, we don't have
|
||||||
|
a backing store thing for it, and we use the magic "all-zero" sha1 to
|
||||||
|
show that. So let's say that you have edited `kernel/sched.c`, but
|
||||||
|
have not actually done a 'git update-index' on it yet - there is no
|
||||||
|
"object" associated with the new state, and you get:
|
||||||
|
|
||||||
|
torvalds@ppc970:~/v2.6/linux> git diff-index --abbrev HEAD
|
||||||
|
:100644 100644 7476bb5ba 000000000 M kernel/sched.c
|
||||||
|
|
||||||
|
i.e., it shows that the tree has changed, and that `kernel/sched.c` is
|
||||||
|
not up to date and may contain new stuff. The all-zero sha1 means that to
|
||||||
|
get the real diff, you need to look at the object in the working directory
|
||||||
|
directly rather than do an object-to-object diff.
|
||||||
|
|
||||||
|
NOTE: As with other commands of this type, 'git diff-index' does not
|
||||||
|
actually look at the contents of the file at all. So maybe
|
||||||
|
`kernel/sched.c` hasn't actually changed, and it's just that you
|
||||||
|
touched it. In either case, it's a note that you need to
|
||||||
|
'git update-index' it to make the index be in sync.
|
||||||
|
|
||||||
|
NOTE: You can have a mixture of files show up as "has been updated"
|
||||||
|
and "is still dirty in the working directory" together. You can always
|
||||||
|
tell which file is in which state, since the "has been updated" ones
|
||||||
|
show a valid sha1, and the "not in sync with the index" ones will
|
||||||
|
always have the special all-zero sha1.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
60
app/src/main/assets/manpages/git-diff-pairs.txt
Normal file
60
app/src/main/assets/manpages/git-diff-pairs.txt
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
git-diff-pairs(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-diff-pairs - Compare the content and mode of provided blob pairs
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git diff-pairs -z [<diff-options>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Show changes for file pairs provided on stdin. Input for this command must be
|
||||||
|
in the NUL-terminated raw output format as generated by commands such as `git
|
||||||
|
diff-tree -z -r --raw`. By default, the outputted diffs are computed and shown
|
||||||
|
in the patch format when stdin closes.
|
||||||
|
|
||||||
|
A single NUL byte may be written to stdin between raw input lines to compute
|
||||||
|
file pair diffs up to that point instead of waiting for stdin to close. A NUL
|
||||||
|
byte is also written to the output to delimit between these batches of diffs.
|
||||||
|
|
||||||
|
Usage of this command enables the traditional diff pipeline to be broken up
|
||||||
|
into separate stages where `diff-pairs` acts as the output phase. Other
|
||||||
|
commands, such as `diff-tree`, may serve as a frontend to compute the raw
|
||||||
|
diff format used as input.
|
||||||
|
|
||||||
|
Instead of computing diffs via `git diff-tree -p -M` in one step, `diff-tree`
|
||||||
|
can compute the file pairs and rename information without the blob diffs. This
|
||||||
|
output can be fed to `diff-pairs` to generate the underlying blob diffs as done
|
||||||
|
in the following example:
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
git diff-tree -z -r -M $a $b |
|
||||||
|
git diff-pairs -z
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Computing the tree diff upfront with rename information allows patch output
|
||||||
|
from `diff-pairs` to be progressively computed over the course of potentially
|
||||||
|
multiple invocations.
|
||||||
|
|
||||||
|
Pathspecs are not currently supported by `diff-pairs`. Pathspec limiting should
|
||||||
|
be performed by the upstream command generating the raw diffs used as input.
|
||||||
|
|
||||||
|
Tree objects are not currently supported as input and are rejected.
|
||||||
|
|
||||||
|
Abbreviated object IDs in the `diff-pairs` input are not supported. Outputted
|
||||||
|
object IDs can be abbreviated using the `--abbrev` option.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
include::diff-generate-patch.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
131
app/src/main/assets/manpages/git-diff-tree.txt
Normal file
131
app/src/main/assets/manpages/git-diff-tree.txt
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
git-diff-tree(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-diff-tree - Compares the content and mode of blobs found via two tree objects
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty]
|
||||||
|
[-t] [-r] [-c | --cc] [--combined-all-paths] [--root] [--merge-base]
|
||||||
|
[<common-diff-options>] <tree-ish> [<tree-ish>] [<path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Compare the content and mode of blobs found via two tree objects.
|
||||||
|
|
||||||
|
If there is only one <tree-ish> given, the commit is compared with its parents
|
||||||
|
(see --stdin below).
|
||||||
|
|
||||||
|
Note that 'git diff-tree' can use the tree encapsulated in a commit object.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
<tree-ish>::
|
||||||
|
The id of a tree object.
|
||||||
|
|
||||||
|
<path>...::
|
||||||
|
If provided, the results are limited to a subset of files
|
||||||
|
matching one of the provided pathspecs.
|
||||||
|
|
||||||
|
-r::
|
||||||
|
Recurse into sub-trees.
|
||||||
|
|
||||||
|
-t::
|
||||||
|
Show tree entry itself as well as subtrees. Implies -r.
|
||||||
|
|
||||||
|
--root::
|
||||||
|
When `--root` is specified the initial commit will be shown as a big
|
||||||
|
creation event. This is equivalent to a diff against the NULL tree.
|
||||||
|
|
||||||
|
--merge-base::
|
||||||
|
Instead of comparing the <tree-ish>s directly, use the merge
|
||||||
|
base between the two <tree-ish>s as the "before" side. There
|
||||||
|
must be two <tree-ish>s given and they must both be commits.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
When `--stdin` is specified, the command does not take
|
||||||
|
<tree-ish> arguments from the command line. Instead, it
|
||||||
|
reads lines containing either two <tree>, one <commit>, or a
|
||||||
|
list of <commit> from its standard input. (Use a single space
|
||||||
|
as separator.)
|
||||||
|
+
|
||||||
|
When two trees are given, it compares the first tree with the second.
|
||||||
|
When a single commit is given, it compares the commit with its
|
||||||
|
parents. The remaining commits, when given, are used as if they are
|
||||||
|
parents of the first commit.
|
||||||
|
+
|
||||||
|
When comparing two trees, the ID of both trees (separated by a space
|
||||||
|
and terminated by a newline) is printed before the difference. When
|
||||||
|
comparing commits, the ID of the first (or only) commit, followed by a
|
||||||
|
newline, is printed.
|
||||||
|
+
|
||||||
|
The following flags further affect the behavior when comparing
|
||||||
|
commits (but not trees).
|
||||||
|
|
||||||
|
-m::
|
||||||
|
By default, 'git diff-tree --stdin' does not show
|
||||||
|
differences for merge commits. With this flag, it shows
|
||||||
|
differences to that commit from all of its parents. See
|
||||||
|
also `-c`.
|
||||||
|
|
||||||
|
-s::
|
||||||
|
By default, 'git diff-tree --stdin' shows differences,
|
||||||
|
either in machine-readable form (without `-p`) or in patch
|
||||||
|
form (with `-p`). This output can be suppressed. It is
|
||||||
|
only useful with the `-v` flag.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
This flag causes 'git diff-tree --stdin' to also show
|
||||||
|
the commit message before the differences.
|
||||||
|
|
||||||
|
include::pretty-options.adoc[]
|
||||||
|
|
||||||
|
--no-commit-id::
|
||||||
|
'git diff-tree' outputs a line with the commit ID when
|
||||||
|
applicable. This flag suppresses the commit ID output.
|
||||||
|
|
||||||
|
-c::
|
||||||
|
This flag changes the way a merge commit is displayed
|
||||||
|
(which means it is useful only when the command is given
|
||||||
|
one <tree-ish>, or `--stdin`). It shows the differences
|
||||||
|
from each of the parents to the merge result simultaneously
|
||||||
|
instead of showing pairwise diff between a parent and the
|
||||||
|
result one at a time (which is what the `-m` option does).
|
||||||
|
Furthermore, it lists only files which were modified
|
||||||
|
from all parents.
|
||||||
|
|
||||||
|
--cc::
|
||||||
|
This flag changes the way a merge commit patch is displayed,
|
||||||
|
in a similar way to the `-c` option. It implies the `-c`
|
||||||
|
and `-p` options and further compresses the patch output
|
||||||
|
by omitting uninteresting hunks whose contents in the parents
|
||||||
|
have only two variants and the merge result picks one of them
|
||||||
|
without modification. When all hunks are uninteresting, the commit
|
||||||
|
itself and the commit log message are not shown, just like in any other
|
||||||
|
"empty diff" case.
|
||||||
|
|
||||||
|
--combined-all-paths::
|
||||||
|
This flag causes combined diffs (used for merge commits) to
|
||||||
|
list the name of the file from all parents. It thus only has
|
||||||
|
effect when -c or --cc are specified, and is likely only
|
||||||
|
useful if filename changes are detected (i.e. when either
|
||||||
|
rename or copy detection have been requested).
|
||||||
|
|
||||||
|
--always::
|
||||||
|
Show the commit itself and the commit log message even
|
||||||
|
if the diff itself is empty.
|
||||||
|
|
||||||
|
|
||||||
|
include::pretty-formats.adoc[]
|
||||||
|
|
||||||
|
include::diff-format.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
256
app/src/main/assets/manpages/git-diff.txt
Normal file
256
app/src/main/assets/manpages/git-diff.txt
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
git-diff(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-diff - Show changes between commits, commit and working tree, etc
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git diff [<options>] [<commit>] [--] [<path>...]
|
||||||
|
git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]
|
||||||
|
git diff [<options>] [--merge-base] <commit> [<commit>...] <commit> [--] [<path>...]
|
||||||
|
git diff [<options>] <commit>...<commit> [--] [<path>...]
|
||||||
|
git diff [<options>] <blob> <blob>
|
||||||
|
git diff [<options>] --no-index [--] <path> <path> [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Show changes between the working tree and the index or a tree, changes
|
||||||
|
between the index and a tree, changes between two trees, changes resulting
|
||||||
|
from a merge, changes between two blob objects, or changes between two
|
||||||
|
files on disk.
|
||||||
|
|
||||||
|
`git diff [<options>] [--] [<path>...]`::
|
||||||
|
|
||||||
|
This form is to view the changes you made relative to
|
||||||
|
the index (staging area for the next commit). In other
|
||||||
|
words, the differences are what you _could_ tell Git to
|
||||||
|
further add to the index but you still haven't. You can
|
||||||
|
stage these changes by using linkgit:git-add[1].
|
||||||
|
|
||||||
|
`git diff [<options>] --no-index [--] <path> <path> [<pathspec>...]`::
|
||||||
|
|
||||||
|
This form is to compare the given two paths on the
|
||||||
|
filesystem. You can omit the `--no-index` option when
|
||||||
|
running the command in a working tree controlled by Git and
|
||||||
|
at least one of the paths points outside the working tree,
|
||||||
|
or when running the command outside a working tree
|
||||||
|
controlled by Git. This form implies `--exit-code`. If both
|
||||||
|
paths point to directories, additional pathspecs may be
|
||||||
|
provided. These will limit the files included in the
|
||||||
|
difference. All such pathspecs must be relative as they
|
||||||
|
apply to both sides of the diff.
|
||||||
|
|
||||||
|
`git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]`::
|
||||||
|
|
||||||
|
This form is to view the changes you staged for the next
|
||||||
|
commit relative to the named _<commit>_. Typically you
|
||||||
|
would want comparison with the latest commit, so if you
|
||||||
|
do not give _<commit>_, it defaults to `HEAD`.
|
||||||
|
If `HEAD` does not exist (e.g. unborn branches) and
|
||||||
|
_<commit>_ is not given, it shows all staged changes.
|
||||||
|
`--staged` is a synonym of `--cached`.
|
||||||
|
+
|
||||||
|
If `--merge-base` is given, instead of using _<commit>_, use the merge base
|
||||||
|
of _<commit>_ and `HEAD`. `git diff --cached --merge-base A` is equivalent to
|
||||||
|
`git diff --cached $(git merge-base A HEAD)`.
|
||||||
|
|
||||||
|
`git diff [<options>] [--merge-base] <commit> [--] [<path>...]`::
|
||||||
|
|
||||||
|
This form is to view the changes you have in your
|
||||||
|
working tree relative to the named _<commit>_. You can
|
||||||
|
use `HEAD` to compare it with the latest commit, or a
|
||||||
|
branch name to compare with the tip of a different
|
||||||
|
branch.
|
||||||
|
+
|
||||||
|
If `--merge-base` is given, instead of using _<commit>_, use the merge base
|
||||||
|
of _<commit>_ and `HEAD`. `git diff --merge-base A` is equivalent to
|
||||||
|
`git diff $(git merge-base A HEAD)`.
|
||||||
|
|
||||||
|
`git diff [<options>] [--merge-base] <commit> <commit> [--] [<path>...]`::
|
||||||
|
|
||||||
|
This is to view the changes between two arbitrary
|
||||||
|
_<commit>_.
|
||||||
|
+
|
||||||
|
If `--merge-base` is given, use the merge base of the two commits for the
|
||||||
|
"before" side. `git diff --merge-base A B` is equivalent to
|
||||||
|
`git diff $(git merge-base A B) B`.
|
||||||
|
|
||||||
|
`git diff [<options>] <commit> <commit>...<commit> [--] [<path>...]`::
|
||||||
|
|
||||||
|
This form is to view the results of a merge commit. The first
|
||||||
|
listed _<commit>_ must be the merge itself; the remaining two or
|
||||||
|
more commits should be its parents. Convenient ways to produce
|
||||||
|
the desired set of revisions are to use the suffixes `@` and
|
||||||
|
`^!`. If `A` is a merge commit, then `git diff A A^@`,
|
||||||
|
`git diff A^!` and `git show A` all give the same combined diff.
|
||||||
|
|
||||||
|
`git diff [<options>] <commit>..<commit> [--] [<path>...]`::
|
||||||
|
|
||||||
|
This is synonymous to the earlier form (without the `..`) for
|
||||||
|
viewing the changes between two arbitrary _<commit>_. If _<commit>_ on
|
||||||
|
one side is omitted, it will have the same effect as
|
||||||
|
using `HEAD` instead.
|
||||||
|
|
||||||
|
`git diff [<options>] <commit>...<commit> [--] [<path>...]`::
|
||||||
|
|
||||||
|
This form is to view the changes on the branch containing
|
||||||
|
and up to the second _<commit>_, starting at a common ancestor
|
||||||
|
of both _<commit>_. `git diff A...B` is equivalent to
|
||||||
|
`git diff $(git merge-base A B) B`. You can omit any one
|
||||||
|
of _<commit>_, which has the same effect as using `HEAD` instead.
|
||||||
|
|
||||||
|
Just in case you are doing something exotic, it should be
|
||||||
|
noted that all of the _<commit>_ in the above description, except
|
||||||
|
in the `--merge-base` case and in the last two forms that use `..`
|
||||||
|
notations, can be any _<tree>_. A tree of interest is the one pointed to
|
||||||
|
by the ref named `AUTO_MERGE`, which is written by the `ort` merge
|
||||||
|
strategy upon hitting merge conflicts (see linkgit:git-merge[1]).
|
||||||
|
Comparing the working tree with `AUTO_MERGE` shows changes you've made
|
||||||
|
so far to resolve textual conflicts (see the examples below).
|
||||||
|
|
||||||
|
For a more complete list of ways to spell _<commit>_, see
|
||||||
|
"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
|
||||||
|
However, `diff` is about comparing two _endpoints_, not ranges,
|
||||||
|
and the range notations (`<commit>..<commit>` and `<commit>...<commit>`)
|
||||||
|
do not mean a range as defined in the
|
||||||
|
"SPECIFYING RANGES" section in linkgit:gitrevisions[7].
|
||||||
|
|
||||||
|
`git diff [<options>] <blob> <blob>`::
|
||||||
|
|
||||||
|
This form is to view the differences between the raw
|
||||||
|
contents of two blob objects.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
:git-diff: 1
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
`-1`::
|
||||||
|
`--base`::
|
||||||
|
`-2`::
|
||||||
|
`--ours`::
|
||||||
|
`-3`::
|
||||||
|
`--theirs`::
|
||||||
|
Compare the working tree with
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* the "base" version (stage #1) when using `-1` or `--base`,
|
||||||
|
* "our branch" (stage #2) when using `-2` or `--ours`, or
|
||||||
|
* "their branch" (stage #3) when using `-3` or `--theirs`.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
The index contains these stages only for unmerged entries i.e.
|
||||||
|
while resolving conflicts. See linkgit:git-read-tree[1]
|
||||||
|
section "3-Way Merge" for detailed information.
|
||||||
|
|
||||||
|
`-0`::
|
||||||
|
Omit diff output for unmerged entries and just show
|
||||||
|
"Unmerged". Can be used only when comparing the working tree
|
||||||
|
with the index.
|
||||||
|
|
||||||
|
`<path>...`::
|
||||||
|
The _<path>_ parameters, when given, are used to limit
|
||||||
|
the diff to the named paths (you can give directory
|
||||||
|
names and get diff for all files under them).
|
||||||
|
|
||||||
|
|
||||||
|
include::diff-format.adoc[]
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Various ways to check your working tree::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git diff <1>
|
||||||
|
$ git diff --cached <2>
|
||||||
|
$ git diff HEAD <3>
|
||||||
|
$ git diff AUTO_MERGE <4>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Changes in the working tree not yet staged for the next commit.
|
||||||
|
<2> Changes between the index and your last commit; what you
|
||||||
|
would be committing if you run `git commit` without `-a` option.
|
||||||
|
<3> Changes in the working tree since your last commit; what you
|
||||||
|
would be committing if you run `git commit -a`
|
||||||
|
<4> Changes in the working tree you've made to resolve textual
|
||||||
|
conflicts so far.
|
||||||
|
|
||||||
|
Comparing with arbitrary commits::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git diff test <1>
|
||||||
|
$ git diff HEAD -- ./test <2>
|
||||||
|
$ git diff HEAD^ HEAD <3>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Instead of using the tip of the current branch, compare with the
|
||||||
|
tip of "test" branch.
|
||||||
|
<2> Instead of comparing with the tip of "test" branch, compare with
|
||||||
|
the tip of the current branch, but limit the comparison to the
|
||||||
|
file "test".
|
||||||
|
<3> Compare the version before the last commit and the last commit.
|
||||||
|
|
||||||
|
Comparing branches::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git diff topic master <1>
|
||||||
|
$ git diff topic..master <2>
|
||||||
|
$ git diff topic...master <3>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Changes between the tips of the topic and the master branches.
|
||||||
|
<2> Same as above.
|
||||||
|
<3> Changes that occurred on the master branch since when the topic
|
||||||
|
branch was started off it.
|
||||||
|
|
||||||
|
Limiting the diff output::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git diff --diff-filter=MRC <1>
|
||||||
|
$ git diff --name-status <2>
|
||||||
|
$ git diff arch/i386 include/asm-i386 <3>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Show only modification, rename, and copy, but not addition
|
||||||
|
or deletion.
|
||||||
|
<2> Show only names and the nature of change, but not actual
|
||||||
|
diff output.
|
||||||
|
<3> Limit diff output to named subtrees.
|
||||||
|
|
||||||
|
Munging the diff output::
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git diff --find-copies-harder -B -C <1>
|
||||||
|
$ git diff -R <2>
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
<1> Spend extra cycles to find renames, copies and complete
|
||||||
|
rewrites (very expensive).
|
||||||
|
<2> Output diff in reverse.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
:git-diff: 1
|
||||||
|
include::config/diff.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
`diff`(1),
|
||||||
|
linkgit:git-difftool[1],
|
||||||
|
linkgit:git-log[1],
|
||||||
|
linkgit:gitdiffcore[7],
|
||||||
|
linkgit:git-format-patch[1],
|
||||||
|
linkgit:git-apply[1],
|
||||||
|
linkgit:git-show[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
142
app/src/main/assets/manpages/git-difftool.txt
Normal file
142
app/src/main/assets/manpages/git-difftool.txt
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
git-difftool(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-difftool - Show changes using common diff tools
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git difftool' [<options>] [<commit> [<commit>]] [--] [<path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
'git difftool' is a Git command that allows you to compare and edit files
|
||||||
|
between revisions using common diff tools. 'git difftool' is a frontend
|
||||||
|
to 'git diff' and accepts the same options and arguments. See
|
||||||
|
linkgit:git-diff[1].
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-d::
|
||||||
|
--dir-diff::
|
||||||
|
Copy the modified files to a temporary location and perform
|
||||||
|
a directory diff on them. This mode never prompts before
|
||||||
|
launching the diff tool.
|
||||||
|
|
||||||
|
-y::
|
||||||
|
--no-prompt::
|
||||||
|
Do not prompt before launching a diff tool.
|
||||||
|
|
||||||
|
--prompt::
|
||||||
|
Prompt before each invocation of the diff tool.
|
||||||
|
This is the default behaviour; the option is provided to
|
||||||
|
override any configuration settings.
|
||||||
|
|
||||||
|
--rotate-to=<file>::
|
||||||
|
Start showing the diff for the given path,
|
||||||
|
the paths before it will move to the end and output.
|
||||||
|
|
||||||
|
--skip-to=<file>::
|
||||||
|
Start showing the diff for the given path, skipping all
|
||||||
|
the paths before it.
|
||||||
|
|
||||||
|
-t <tool>::
|
||||||
|
--tool=<tool>::
|
||||||
|
Use the diff tool specified by <tool>. Valid values include
|
||||||
|
emerge, kompare, meld, and vimdiff. Run `git difftool --tool-help`
|
||||||
|
for the list of valid <tool> settings.
|
||||||
|
+
|
||||||
|
If a diff tool is not specified, 'git difftool'
|
||||||
|
will use the configuration variable `diff.tool`. If the
|
||||||
|
configuration variable `diff.tool` is not set, 'git difftool'
|
||||||
|
will pick a suitable default.
|
||||||
|
+
|
||||||
|
You can explicitly provide a full path to the tool by setting the
|
||||||
|
configuration variable `difftool.<tool>.path`. For example, you
|
||||||
|
can configure the absolute path to kdiff3 by setting
|
||||||
|
`difftool.kdiff3.path`. Otherwise, 'git difftool' assumes the
|
||||||
|
tool is available in PATH.
|
||||||
|
+
|
||||||
|
Instead of running one of the known diff tools,
|
||||||
|
'git difftool' can be customized to run an alternative program
|
||||||
|
by specifying the command line to invoke in a configuration
|
||||||
|
variable `difftool.<tool>.cmd`.
|
||||||
|
+
|
||||||
|
When 'git difftool' is invoked with this tool (either through the
|
||||||
|
`-t` or `--tool` option or the `diff.tool` configuration variable)
|
||||||
|
the configured command line will be invoked with the following
|
||||||
|
variables available: `$LOCAL` is set to the name of the temporary
|
||||||
|
file containing the contents of the diff pre-image and `$REMOTE`
|
||||||
|
is set to the name of the temporary file containing the contents
|
||||||
|
of the diff post-image. `$MERGED` is the name of the file which is
|
||||||
|
being compared. `$BASE` is provided for compatibility
|
||||||
|
with custom merge tool commands and has the same value as `$MERGED`.
|
||||||
|
|
||||||
|
--tool-help::
|
||||||
|
Print a list of diff tools that may be used with `--tool`.
|
||||||
|
|
||||||
|
--symlinks::
|
||||||
|
--no-symlinks::
|
||||||
|
'git difftool''s default behavior is to create symlinks to the
|
||||||
|
working tree when run in `--dir-diff` mode and the right-hand
|
||||||
|
side of the comparison yields the same content as the file in
|
||||||
|
the working tree.
|
||||||
|
+
|
||||||
|
Specifying `--no-symlinks` instructs 'git difftool' to create copies
|
||||||
|
instead. `--no-symlinks` is the default on Windows.
|
||||||
|
|
||||||
|
-x <command>::
|
||||||
|
--extcmd=<command>::
|
||||||
|
Specify a custom command for viewing diffs.
|
||||||
|
'git-difftool' ignores the configured defaults and runs
|
||||||
|
`<command> $LOCAL $REMOTE` when this option is specified.
|
||||||
|
Additionally, `$BASE` is set in the environment.
|
||||||
|
|
||||||
|
-g::
|
||||||
|
--gui::
|
||||||
|
--no-gui::
|
||||||
|
When 'git-difftool' is invoked with the `-g` or `--gui` option
|
||||||
|
the default diff tool will be read from the configured
|
||||||
|
`diff.guitool` variable instead of `diff.tool`. This may be
|
||||||
|
selected automatically using the configuration variable
|
||||||
|
`difftool.guiDefault`. The `--no-gui` option can be used to
|
||||||
|
override these settings. If `diff.guitool` is not set, we will
|
||||||
|
fallback in the order of `merge.guitool`, `diff.tool`,
|
||||||
|
`merge.tool` until a tool is found.
|
||||||
|
|
||||||
|
--trust-exit-code::
|
||||||
|
--no-trust-exit-code::
|
||||||
|
Errors reported by the diff tool are ignored by default.
|
||||||
|
Use `--trust-exit-code` to make 'git-difftool' exit when an
|
||||||
|
invoked diff tool returns a non-zero exit code.
|
||||||
|
+
|
||||||
|
'git-difftool' will forward the exit code of the invoked tool when
|
||||||
|
`--trust-exit-code` is used.
|
||||||
|
|
||||||
|
See linkgit:git-diff[1] for the full list of supported options.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
'git difftool' falls back to 'git mergetool' config variables when the
|
||||||
|
difftool equivalents have not been defined.
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-rest.adoc[]
|
||||||
|
|
||||||
|
include::config/difftool.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-diff[1]::
|
||||||
|
Show changes between commits, commit and working tree, etc
|
||||||
|
|
||||||
|
linkgit:git-mergetool[1]::
|
||||||
|
Run merge conflict resolution tools to resolve merge conflicts
|
||||||
|
|
||||||
|
linkgit:git-config[1]::
|
||||||
|
Get and set repository or global options
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
315
app/src/main/assets/manpages/git-fast-export.txt
Normal file
315
app/src/main/assets/manpages/git-fast-export.txt
Normal file
@@ -0,0 +1,315 @@
|
|||||||
|
git-fast-export(1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fast-export - Git data exporter
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git fast-export' [<options>] | 'git fast-import'
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This program dumps the given revisions in a form suitable to be piped
|
||||||
|
into 'git fast-import'.
|
||||||
|
|
||||||
|
You can use it as a human-readable bundle replacement (see
|
||||||
|
linkgit:git-bundle[1]), or as a format that can be edited before being
|
||||||
|
fed to 'git fast-import' in order to do history rewrites (an ability
|
||||||
|
relied on by tools like 'git filter-repo').
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--progress=<n>::
|
||||||
|
Insert 'progress' statements every <n> objects, to be shown by
|
||||||
|
'git fast-import' during import.
|
||||||
|
|
||||||
|
--signed-tags=(verbatim|warn-verbatim|warn-strip|strip|abort)::
|
||||||
|
Specify how to handle signed tags. Since any transformation
|
||||||
|
after the export (or during the export, such as excluding
|
||||||
|
revisions) can change the hashes being signed, the signatures
|
||||||
|
may become invalid.
|
||||||
|
+
|
||||||
|
When asking to 'abort' (which is the default), this program will die
|
||||||
|
when encountering a signed tag. With 'strip', the tags will silently
|
||||||
|
be made unsigned, with 'warn-strip' they will be made unsigned but a
|
||||||
|
warning will be displayed, with 'verbatim', they will be silently
|
||||||
|
exported and with 'warn-verbatim' (or 'warn', a deprecated synonym),
|
||||||
|
they will be exported, but you will see a warning. 'verbatim' and
|
||||||
|
'warn-verbatim' should only be used if you know that no transformation
|
||||||
|
affecting tags or any commit in their history will be performed by you
|
||||||
|
or by fast-export or fast-import, or if you do not care that the
|
||||||
|
resulting tag will have an invalid signature.
|
||||||
|
|
||||||
|
--signed-commits=(verbatim|warn-verbatim|warn-strip|strip|abort)::
|
||||||
|
Specify how to handle signed commits. Behaves exactly as
|
||||||
|
'--signed-tags', but for commits. Default is 'strip', which
|
||||||
|
is the same as how earlier versions of this command without
|
||||||
|
this option behaved.
|
||||||
|
+
|
||||||
|
When exported, a signature starts with:
|
||||||
|
+
|
||||||
|
gpgsig <git-hash-algo> <signature-format>
|
||||||
|
+
|
||||||
|
where <git-hash-algo> is the Git object hash so either "sha1" or
|
||||||
|
"sha256", and <signature-format> is the signature type, so "openpgp",
|
||||||
|
"x509", "ssh" or "unknown".
|
||||||
|
+
|
||||||
|
For example, an OpenPGP signature on a SHA-1 commit starts with
|
||||||
|
`gpgsig sha1 openpgp`, while an SSH signature on a SHA-256 commit
|
||||||
|
starts with `gpgsig sha256 ssh`.
|
||||||
|
+
|
||||||
|
While all the signatures of a commit are exported, an importer may
|
||||||
|
choose to accept only some of them. For example
|
||||||
|
linkgit:git-fast-import[1] currently stores at most one signature per
|
||||||
|
Git hash algorithm in each commit.
|
||||||
|
+
|
||||||
|
NOTE: This is highly experimental and the format of the data stream may
|
||||||
|
change in the future without compatibility guarantees.
|
||||||
|
|
||||||
|
--tag-of-filtered-object=(abort|drop|rewrite)::
|
||||||
|
Specify how to handle tags whose tagged object is filtered out.
|
||||||
|
Since revisions and files to export can be limited by path,
|
||||||
|
tagged objects may be filtered completely.
|
||||||
|
+
|
||||||
|
When asking to 'abort' (which is the default), this program will die
|
||||||
|
when encountering such a tag. With 'drop' it will omit such tags from
|
||||||
|
the output. With 'rewrite', if the tagged object is a commit, it will
|
||||||
|
rewrite the tag to tag an ancestor commit (via parent rewriting; see
|
||||||
|
linkgit:git-rev-list[1]).
|
||||||
|
|
||||||
|
-M::
|
||||||
|
-C::
|
||||||
|
Perform move and/or copy detection, as described in the
|
||||||
|
linkgit:git-diff[1] manual page, and use it to generate
|
||||||
|
rename and copy commands in the output dump.
|
||||||
|
+
|
||||||
|
Note that earlier versions of this command did not complain and
|
||||||
|
produced incorrect results if you gave these options.
|
||||||
|
|
||||||
|
--export-marks=<file>::
|
||||||
|
Dumps the internal marks table to <file> when complete.
|
||||||
|
Marks are written one per line as `:markid SHA-1`. Only marks
|
||||||
|
for revisions are dumped; marks for blobs are ignored.
|
||||||
|
Backends can use this file to validate imports after they
|
||||||
|
have been completed, or to save the marks table across
|
||||||
|
incremental runs. As <file> is only opened and truncated
|
||||||
|
at completion, the same path can also be safely given to
|
||||||
|
--import-marks.
|
||||||
|
The file will not be written if no new object has been
|
||||||
|
marked/exported.
|
||||||
|
|
||||||
|
--import-marks=<file>::
|
||||||
|
Before processing any input, load the marks specified in
|
||||||
|
<file>. The input file must exist, must be readable, and
|
||||||
|
must use the same format as produced by --export-marks.
|
||||||
|
|
||||||
|
--mark-tags::
|
||||||
|
In addition to labelling blobs and commits with mark ids, also
|
||||||
|
label tags. This is useful in conjunction with
|
||||||
|
`--export-marks` and `--import-marks`, and is also useful (and
|
||||||
|
necessary) for exporting of nested tags. It does not hurt
|
||||||
|
other cases and would be the default, but many fast-import
|
||||||
|
frontends are not prepared to accept tags with mark
|
||||||
|
identifiers.
|
||||||
|
+
|
||||||
|
Any commits (or tags) that have already been marked will not be
|
||||||
|
exported again. If the backend uses a similar --import-marks file,
|
||||||
|
this allows for incremental bidirectional exporting of the repository
|
||||||
|
by keeping the marks the same across runs.
|
||||||
|
|
||||||
|
--fake-missing-tagger::
|
||||||
|
Some old repositories have tags without a tagger. The
|
||||||
|
fast-import protocol was pretty strict about that, and did not
|
||||||
|
allow that. So fake a tagger to be able to fast-import the
|
||||||
|
output.
|
||||||
|
|
||||||
|
--use-done-feature::
|
||||||
|
Start the stream with a 'feature done' stanza, and terminate
|
||||||
|
it with a 'done' command.
|
||||||
|
|
||||||
|
--no-data::
|
||||||
|
Skip output of blob objects and instead refer to blobs via
|
||||||
|
their original SHA-1 hash. This is useful when rewriting the
|
||||||
|
directory structure or history of a repository without
|
||||||
|
touching the contents of individual files. Note that the
|
||||||
|
resulting stream can only be used by a repository which
|
||||||
|
already contains the necessary objects.
|
||||||
|
|
||||||
|
--full-tree::
|
||||||
|
This option will cause fast-export to issue a "deleteall"
|
||||||
|
directive for each commit followed by a full list of all files
|
||||||
|
in the commit (as opposed to just listing the files which are
|
||||||
|
different from the commit's first parent).
|
||||||
|
|
||||||
|
--anonymize::
|
||||||
|
Anonymize the contents of the repository while still retaining
|
||||||
|
the shape of the history and stored tree. See the section on
|
||||||
|
`ANONYMIZING` below.
|
||||||
|
|
||||||
|
--anonymize-map=<from>[:<to>]::
|
||||||
|
Convert token `<from>` to `<to>` in the anonymized output. If
|
||||||
|
`<to>` is omitted, map `<from>` to itself (i.e., do not
|
||||||
|
anonymize it). See the section on `ANONYMIZING` below.
|
||||||
|
|
||||||
|
--reference-excluded-parents::
|
||||||
|
By default, running a command such as `git fast-export
|
||||||
|
master~5..master` will not include the commit master{tilde}5
|
||||||
|
and will make master{tilde}4 no longer have master{tilde}5 as
|
||||||
|
a parent (though both the old master{tilde}4 and new
|
||||||
|
master{tilde}4 will have all the same files). Use
|
||||||
|
--reference-excluded-parents to instead have the stream
|
||||||
|
refer to commits in the excluded range of history by their
|
||||||
|
sha1sum. Note that the resulting stream can only be used by a
|
||||||
|
repository which already contains the necessary parent
|
||||||
|
commits.
|
||||||
|
|
||||||
|
--show-original-ids::
|
||||||
|
Add an extra directive to the output for commits and blobs,
|
||||||
|
`original-oid <SHA1SUM>`. While such directives will likely be
|
||||||
|
ignored by importers such as git-fast-import, it may be useful
|
||||||
|
for intermediary filters (e.g. for rewriting commit messages
|
||||||
|
which refer to older commits, or for stripping blobs by id).
|
||||||
|
|
||||||
|
--reencode=(yes|no|abort)::
|
||||||
|
Specify how to handle `encoding` header in commit objects. When
|
||||||
|
asking to 'abort' (which is the default), this program will die
|
||||||
|
when encountering such a commit object. With 'yes', the commit
|
||||||
|
message will be re-encoded into UTF-8. With 'no', the original
|
||||||
|
encoding will be preserved.
|
||||||
|
|
||||||
|
--refspec::
|
||||||
|
Apply the specified refspec to each ref exported. Multiple of them can
|
||||||
|
be specified.
|
||||||
|
|
||||||
|
[<git-rev-list-args>...]::
|
||||||
|
A list of arguments, acceptable to 'git rev-parse' and
|
||||||
|
'git rev-list', that specifies the specific objects and references
|
||||||
|
to export. For example, `master~10..master` causes the
|
||||||
|
current master reference to be exported along with all objects
|
||||||
|
added since its 10th ancestor commit and (unless the
|
||||||
|
--reference-excluded-parents option is specified) all files
|
||||||
|
common to master{tilde}9 and master{tilde}10.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
$ git fast-export --all | (cd /empty/repository && git fast-import)
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
|
This will export the whole repository and import it into the existing
|
||||||
|
empty repository. Except for reencoding commits that are not in
|
||||||
|
UTF-8, it would be a one-to-one mirror.
|
||||||
|
|
||||||
|
-----------------------------------------------------
|
||||||
|
$ git fast-export master~5..master |
|
||||||
|
sed "s|refs/heads/master|refs/heads/other|" |
|
||||||
|
git fast-import
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
This makes a new branch called 'other' from 'master~5..master'
|
||||||
|
(i.e. if 'master' has linear history, it will take the last 5 commits).
|
||||||
|
|
||||||
|
Note that this assumes that none of the blobs and commit messages
|
||||||
|
referenced by that revision range contains the string
|
||||||
|
'refs/heads/master'.
|
||||||
|
|
||||||
|
|
||||||
|
ANONYMIZING
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If the `--anonymize` option is given, git will attempt to remove all
|
||||||
|
identifying information from the repository while still retaining enough
|
||||||
|
of the original tree and history patterns to reproduce some bugs. The
|
||||||
|
goal is that a git bug which is found on a private repository will
|
||||||
|
persist in the anonymized repository, and the latter can be shared with
|
||||||
|
git developers to help solve the bug.
|
||||||
|
|
||||||
|
With this option, git will replace all refnames, paths, blob contents,
|
||||||
|
commit and tag messages, names, and email addresses in the output with
|
||||||
|
anonymized data. Two instances of the same string will be replaced
|
||||||
|
equivalently (e.g., two commits with the same author will have the same
|
||||||
|
anonymized author in the output, but bear no resemblance to the original
|
||||||
|
author string). The relationship between commits, branches, and tags is
|
||||||
|
retained, as well as the commit timestamps (but the commit messages and
|
||||||
|
refnames bear no resemblance to the originals). The relative makeup of
|
||||||
|
the tree is retained (e.g., if you have a root tree with 10 files and 3
|
||||||
|
trees, so will the output), but their names and the contents of the
|
||||||
|
files will be replaced.
|
||||||
|
|
||||||
|
If you think you have found a git bug, you can start by exporting an
|
||||||
|
anonymized stream of the whole repository:
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
$ git fast-export --anonymize --all >anon-stream
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
Then confirm that the bug persists in a repository created from that
|
||||||
|
stream (many bugs will not, as they really do depend on the exact
|
||||||
|
repository contents):
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
$ git init anon-repo
|
||||||
|
$ cd anon-repo
|
||||||
|
$ git fast-import <../anon-stream
|
||||||
|
$ ... test your bug ...
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
If the anonymized repository shows the bug, it may be worth sharing
|
||||||
|
`anon-stream` along with a regular bug report. Note that the anonymized
|
||||||
|
stream compresses very well, so gzipping it is encouraged. If you want
|
||||||
|
to examine the stream to see that it does not contain any private data,
|
||||||
|
you can peruse it directly before sending. You may also want to try:
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
$ perl -pe 's/\d+/X/g' <anon-stream | sort -u | less
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
which shows all of the unique lines (with numbers converted to "X", to
|
||||||
|
collapse "User 0", "User 1", etc into "User X"). This produces a much
|
||||||
|
smaller output, and it is usually easy to quickly confirm that there is
|
||||||
|
no private data in the stream.
|
||||||
|
|
||||||
|
Reproducing some bugs may require referencing particular commits or
|
||||||
|
paths, which becomes challenging after refnames and paths have been
|
||||||
|
anonymized. You can ask for a particular token to be left as-is or
|
||||||
|
mapped to a new value. For example, if you have a bug which reproduces
|
||||||
|
with `git rev-list sensitive -- secret.c`, you can run:
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
$ git fast-export --anonymize --all \
|
||||||
|
--anonymize-map=sensitive:foo \
|
||||||
|
--anonymize-map=secret.c:bar.c \
|
||||||
|
>stream
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
After importing the stream, you can then run `git rev-list foo -- bar.c`
|
||||||
|
in the anonymized repository.
|
||||||
|
|
||||||
|
Note that paths and refnames are split into tokens at slash boundaries.
|
||||||
|
The command above would anonymize `subdir/secret.c` as something like
|
||||||
|
`path123/bar.c`; you could then search for `bar.c` in the anonymized
|
||||||
|
repository to determine the final pathname.
|
||||||
|
|
||||||
|
To make referencing the final pathname simpler, you can map each path
|
||||||
|
component; so if you also anonymize `subdir` to `publicdir`, then the
|
||||||
|
final pathname would be `publicdir/bar.c`.
|
||||||
|
|
||||||
|
LIMITATIONS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Since 'git fast-import' cannot tag trees, you will not be
|
||||||
|
able to export the linux.git repository completely, as it contains
|
||||||
|
a tag referencing a tree instead of a commit.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-fast-import[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
1667
app/src/main/assets/manpages/git-fast-import.txt
Normal file
1667
app/src/main/assets/manpages/git-fast-import.txt
Normal file
File diff suppressed because it is too large
Load Diff
136
app/src/main/assets/manpages/git-fetch-pack.txt
Normal file
136
app/src/main/assets/manpages/git-fetch-pack.txt
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
git-fetch-pack(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fetch-pack - Receive missing objects from another repository
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git fetch-pack' [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag]
|
||||||
|
[--upload-pack=<git-upload-pack>]
|
||||||
|
[--depth=<n>] [--no-progress]
|
||||||
|
[-v] <repository> [<refs>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Usually you would want to use 'git fetch', which is a
|
||||||
|
higher level wrapper of this command, instead.
|
||||||
|
|
||||||
|
Invokes 'git-upload-pack' on a possibly remote repository
|
||||||
|
and asks it to send objects missing from this repository, to
|
||||||
|
update the named heads. The list of commits available locally
|
||||||
|
is found out by scanning the local refs/ hierarchy and sent to
|
||||||
|
'git-upload-pack' running on the other end.
|
||||||
|
|
||||||
|
This command degenerates to download everything to complete the
|
||||||
|
asked refs from the remote side when the local side does not
|
||||||
|
have a common ancestor commit.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--all::
|
||||||
|
Fetch all remote refs.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Take the list of refs from stdin, one per line. If there
|
||||||
|
are refs specified on the command line in addition to this
|
||||||
|
option, then the refs from stdin are processed after those
|
||||||
|
on the command line.
|
||||||
|
+
|
||||||
|
If `--stateless-rpc` is specified together with this option then
|
||||||
|
the list of refs must be in packet format (pkt-line). Each ref must
|
||||||
|
be in a separate packet, and the list must end with a flush packet.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Pass `-q` flag to 'git unpack-objects'; this makes the
|
||||||
|
cloning process less verbose.
|
||||||
|
|
||||||
|
-k::
|
||||||
|
--keep::
|
||||||
|
Do not invoke 'git unpack-objects' on received data, but
|
||||||
|
create a single packfile out of it instead, and store it
|
||||||
|
in the object database. If provided twice then the pack is
|
||||||
|
locked against repacking.
|
||||||
|
|
||||||
|
--thin::
|
||||||
|
Fetch a "thin" pack, which records objects in deltified form based
|
||||||
|
on objects not included in the pack to reduce network traffic.
|
||||||
|
|
||||||
|
--include-tag::
|
||||||
|
If the remote side supports it, annotated tags objects will
|
||||||
|
be downloaded on the same connection as the other objects if
|
||||||
|
the object the tag references is downloaded. The caller must
|
||||||
|
otherwise determine the tags this option made available.
|
||||||
|
|
||||||
|
--upload-pack=<git-upload-pack>::
|
||||||
|
Use this to specify the path to 'git-upload-pack' on the
|
||||||
|
remote side, if it is not found on your $PATH.
|
||||||
|
Installations of sshd ignores the user's environment
|
||||||
|
setup scripts for login shells (e.g. .bash_profile) and
|
||||||
|
your privately installed git may not be found on the system
|
||||||
|
default $PATH. Another workaround suggested is to set
|
||||||
|
up your $PATH in ".bashrc", but this flag is for people
|
||||||
|
who do not want to pay the overhead for non-interactive
|
||||||
|
shells by having a lean .bashrc file (they set most of
|
||||||
|
the things up in .bash_profile).
|
||||||
|
|
||||||
|
--exec=<git-upload-pack>::
|
||||||
|
Same as --upload-pack=<git-upload-pack>.
|
||||||
|
|
||||||
|
--depth=<n>::
|
||||||
|
Limit fetching to ancestor-chains not longer than n.
|
||||||
|
'git-upload-pack' treats the special depth 2147483647 as
|
||||||
|
infinite even if there is an ancestor-chain that long.
|
||||||
|
|
||||||
|
--shallow-since=<date>::
|
||||||
|
Deepen or shorten the history of a shallow repository to
|
||||||
|
include all reachable commits after <date>.
|
||||||
|
|
||||||
|
--shallow-exclude=<ref>::
|
||||||
|
Deepen or shorten the history of a shallow repository to
|
||||||
|
exclude commits reachable from a specified remote branch or tag.
|
||||||
|
This option can be specified multiple times.
|
||||||
|
|
||||||
|
--deepen-relative::
|
||||||
|
Argument --depth specifies the number of commits from the
|
||||||
|
current shallow boundary instead of from the tip of each
|
||||||
|
remote branch history.
|
||||||
|
|
||||||
|
--refetch::
|
||||||
|
Skips negotiating commits with the server in order to fetch all matching
|
||||||
|
objects. Use to reapply a new partial clone blob/tree filter.
|
||||||
|
|
||||||
|
--no-progress::
|
||||||
|
Do not show the progress.
|
||||||
|
|
||||||
|
--check-self-contained-and-connected::
|
||||||
|
Output "connectivity-ok" if the received pack is
|
||||||
|
self-contained and connected.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
Run verbosely.
|
||||||
|
|
||||||
|
<repository>::
|
||||||
|
The URL to the remote repository.
|
||||||
|
|
||||||
|
<refs>...::
|
||||||
|
The remote heads to update from. This is relative to
|
||||||
|
$GIT_DIR (e.g. "HEAD", "refs/heads/master"). When
|
||||||
|
unspecified, update from all heads the remote side has.
|
||||||
|
+
|
||||||
|
If the remote has enabled the options `uploadpack.allowTipSHA1InWant`,
|
||||||
|
`uploadpack.allowReachableSHA1InWant`, or `uploadpack.allowAnySHA1InWant`,
|
||||||
|
they may alternatively be 40-hex sha1s present on the remote.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-fetch[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
317
app/src/main/assets/manpages/git-fetch.txt
Normal file
317
app/src/main/assets/manpages/git-fetch.txt
Normal file
@@ -0,0 +1,317 @@
|
|||||||
|
git-fetch(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fetch - Download objects and refs from another repository
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git fetch [<options>] [<repository> [<refspec>...]]
|
||||||
|
git fetch [<options>] <group>
|
||||||
|
git fetch --multiple [<options>] [(<repository>|<group>)...]
|
||||||
|
git fetch --all [<options>]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Fetch branches and/or tags (collectively, "refs") from one or more
|
||||||
|
other repositories, along with the objects necessary to complete their
|
||||||
|
histories. Remote-tracking branches are updated (see the description
|
||||||
|
of _<refspec>_ below for ways to control this behavior).
|
||||||
|
|
||||||
|
By default, any tag that points into the histories being fetched is
|
||||||
|
also fetched; the effect is to fetch tags that
|
||||||
|
point at branches that you are interested in. This default behavior
|
||||||
|
can be changed by using the `--tags` or `--no-tags` options or by
|
||||||
|
configuring `remote.<name>.tagOpt`. By using a refspec that fetches tags
|
||||||
|
explicitly, you can fetch tags that do not point into branches you
|
||||||
|
are interested in as well.
|
||||||
|
|
||||||
|
`git fetch` can fetch from either a single named repository or URL,
|
||||||
|
or from several repositories at once if _<group>_ is given and
|
||||||
|
there is a `remotes.<group>` entry in the configuration file.
|
||||||
|
(See linkgit:git-config[1]).
|
||||||
|
|
||||||
|
When no remote is specified, by default the `origin` remote will be used,
|
||||||
|
unless there's an upstream branch configured for the current branch.
|
||||||
|
|
||||||
|
The names of refs that are fetched, together with the object names
|
||||||
|
they point at, are written to `.git/FETCH_HEAD`. This information
|
||||||
|
may be used by scripts or other git commands, such as linkgit:git-pull[1].
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::fetch-options.adoc[]
|
||||||
|
|
||||||
|
include::pull-fetch-param.adoc[]
|
||||||
|
|
||||||
|
`--stdin`::
|
||||||
|
Read refspecs, one per line, from stdin in addition to those provided
|
||||||
|
as arguments. The "tag _<name>_" format is not supported.
|
||||||
|
|
||||||
|
include::urls-remotes.adoc[]
|
||||||
|
|
||||||
|
[[CRTB]]
|
||||||
|
CONFIGURED REMOTE-TRACKING BRANCHES
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
You often interact with the same remote repository by
|
||||||
|
regularly and repeatedly fetching from it. In order to keep track
|
||||||
|
of the progress of such a remote repository, `git fetch` allows you
|
||||||
|
to configure `remote.<repository>.fetch` configuration variables.
|
||||||
|
|
||||||
|
Typically such a variable may look like this:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
[remote "origin"]
|
||||||
|
fetch = +refs/heads/*:refs/remotes/origin/*
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
This configuration is used in two ways:
|
||||||
|
|
||||||
|
* When `git fetch` is run without specifying what branches
|
||||||
|
and/or tags to fetch on the command line, e.g. `git fetch origin`
|
||||||
|
or `git fetch`, `remote.<repository>.fetch` values are used as
|
||||||
|
the refspecs--they specify which refs to fetch and which local refs
|
||||||
|
to update. The example above will fetch
|
||||||
|
all branches that exist in the `origin` (i.e. any ref that matches
|
||||||
|
the left-hand side of the value, `refs/heads/*`) and update the
|
||||||
|
corresponding remote-tracking branches in the `refs/remotes/origin/*`
|
||||||
|
hierarchy.
|
||||||
|
|
||||||
|
* When `git fetch` is run with explicit branches and/or tags
|
||||||
|
to fetch on the command line, e.g. `git fetch origin master`, the
|
||||||
|
_<refspec>s_ given on the command line determine what are to be
|
||||||
|
fetched (e.g. `master` in the example,
|
||||||
|
which is a short-hand for `master:`, which in turn means
|
||||||
|
"fetch the `master` branch but I do not explicitly say what
|
||||||
|
remote-tracking branch to update with it from the command line"),
|
||||||
|
and the example command will
|
||||||
|
fetch _only_ the `master` branch. The `remote.<repository>.fetch`
|
||||||
|
values determine which
|
||||||
|
remote-tracking branch, if any, is updated. When used in this
|
||||||
|
way, the `remote.<repository>.fetch` values do not have any
|
||||||
|
effect in deciding _what_ gets fetched (i.e. the values are not
|
||||||
|
used as refspecs when the command-line lists refspecs); they are
|
||||||
|
only used to decide _where_ the refs that are fetched are stored
|
||||||
|
by acting as a mapping.
|
||||||
|
|
||||||
|
The latter use of the `remote.<repository>.fetch` values can be
|
||||||
|
overridden by giving the `--refmap=<refspec>` parameter(s) on the
|
||||||
|
command line.
|
||||||
|
|
||||||
|
PRUNING
|
||||||
|
-------
|
||||||
|
|
||||||
|
Git has a default disposition of keeping data unless it's explicitly
|
||||||
|
thrown away; this extends to holding onto local references to branches
|
||||||
|
on remotes that have themselves deleted those branches.
|
||||||
|
|
||||||
|
If left to accumulate, these stale references might make performance
|
||||||
|
worse on big and busy repos that have a lot of branch churn, and
|
||||||
|
e.g. make the output of commands like `git branch -a --contains
|
||||||
|
<commit>` needlessly verbose, as well as impacting anything else
|
||||||
|
that'll work with the complete set of known references.
|
||||||
|
|
||||||
|
These remote-tracking references can be deleted as a one-off with
|
||||||
|
either of:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
# While fetching
|
||||||
|
$ git fetch --prune <name>
|
||||||
|
|
||||||
|
# Only prune, don't fetch
|
||||||
|
$ git remote prune <name>
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
To prune references as part of your normal workflow without needing to
|
||||||
|
remember to run that, set `fetch.prune` globally, or
|
||||||
|
`remote.<name>.prune` per-remote in the config. See
|
||||||
|
linkgit:git-config[1].
|
||||||
|
|
||||||
|
Here's where things get tricky and more specific. The pruning feature
|
||||||
|
doesn't actually care about branches, instead it'll prune local <-->
|
||||||
|
remote-references as a function of the refspec of the remote (see
|
||||||
|
`<refspec>` and <<CRTB,CONFIGURED REMOTE-TRACKING BRANCHES>> above).
|
||||||
|
|
||||||
|
Therefore if the refspec for the remote includes
|
||||||
|
e.g. `refs/tags/*:refs/tags/*`, or you manually run e.g. `git fetch
|
||||||
|
--prune <name> "refs/tags/*:refs/tags/*"` it won't be stale remote
|
||||||
|
tracking branches that are deleted, but any local tag that doesn't
|
||||||
|
exist on the remote.
|
||||||
|
|
||||||
|
This might not be what you expect, i.e. you want to prune remote
|
||||||
|
_<name>_, but also explicitly fetch tags from it, so when you fetch
|
||||||
|
from it you delete all your local tags, most of which may not have
|
||||||
|
come from the _<name>_ remote in the first place.
|
||||||
|
|
||||||
|
So be careful when using this with a refspec like
|
||||||
|
`refs/tags/*:refs/tags/*`, or any other refspec which might map
|
||||||
|
references from multiple remotes to the same local namespace.
|
||||||
|
|
||||||
|
Since keeping up-to-date with both branches and tags on the remote is
|
||||||
|
a common use-case the `--prune-tags` option can be supplied along with
|
||||||
|
`--prune` to prune local tags that don't exist on the remote, and
|
||||||
|
force-update those tags that differ. Tag pruning can also be enabled
|
||||||
|
with `fetch.pruneTags` or `remote.<name>.pruneTags` in the config. See
|
||||||
|
linkgit:git-config[1].
|
||||||
|
|
||||||
|
The `--prune-tags` option is equivalent to having
|
||||||
|
`refs/tags/*:refs/tags/*` declared in the refspecs of the remote. This
|
||||||
|
can lead to some seemingly strange interactions:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
# These both fetch tags
|
||||||
|
$ git fetch --no-tags origin 'refs/tags/*:refs/tags/*'
|
||||||
|
$ git fetch --no-tags --prune-tags origin
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
The reason it doesn't error out when provided without `--prune` or its
|
||||||
|
config versions is for flexibility of the configured versions, and to
|
||||||
|
maintain a 1=1 mapping between what the command line flags do, and
|
||||||
|
what the configuration versions do.
|
||||||
|
|
||||||
|
It's reasonable to e.g. configure `fetch.pruneTags=true` in
|
||||||
|
`~/.gitconfig` to have tags pruned whenever `git fetch --prune` is
|
||||||
|
run, without making every invocation of `git fetch` without `--prune`
|
||||||
|
an error.
|
||||||
|
|
||||||
|
Pruning tags with `--prune-tags` also works when fetching a URL
|
||||||
|
instead of a named remote. These will all prune tags not found on
|
||||||
|
origin:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git fetch origin --prune --prune-tags
|
||||||
|
$ git fetch origin --prune 'refs/tags/*:refs/tags/*'
|
||||||
|
$ git fetch <url-of-origin> --prune --prune-tags
|
||||||
|
$ git fetch <url-of-origin> --prune 'refs/tags/*:refs/tags/*'
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
The output of "git fetch" depends on the transport method used; this
|
||||||
|
section describes the output when fetching over the Git protocol
|
||||||
|
(either locally or via ssh) and Smart HTTP protocol.
|
||||||
|
|
||||||
|
The status of the fetch is output in tabular form, with each line
|
||||||
|
representing the status of a single ref. Each line is of the form:
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
<flag> <summary> <from> -> <to> [<reason>]
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
When using `--porcelain`, the output format is intended to be
|
||||||
|
machine-parseable. In contrast to the human-readable output formats it
|
||||||
|
thus prints to standard output instead of standard error. Each line is
|
||||||
|
of the form:
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
<flag> <old-object-id> <new-object-id> <local-reference>
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
The status of up-to-date refs is shown only if the `--verbose` option is
|
||||||
|
used.
|
||||||
|
|
||||||
|
In compact output mode, specified with configuration variable
|
||||||
|
fetch.output, if either entire _<from>_ or _<to>_ is found in the
|
||||||
|
other string, it will be substituted with `*` in the other string. For
|
||||||
|
example, `master -> origin/master` becomes `master -> origin/*`.
|
||||||
|
|
||||||
|
flag::
|
||||||
|
A single character indicating the status of the ref:
|
||||||
|
(space);; for a successfully fetched fast-forward;
|
||||||
|
`+`;; for a successful forced update;
|
||||||
|
`-`;; for a successfully pruned ref;
|
||||||
|
`t`;; for a successful tag update;
|
||||||
|
`*`;; for a successfully fetched new ref;
|
||||||
|
`!`;; for a ref that was rejected or failed to update; and
|
||||||
|
`=`;; for a ref that was up to date and did not need fetching.
|
||||||
|
|
||||||
|
summary::
|
||||||
|
For a successfully fetched ref, the summary shows the old and new
|
||||||
|
values of the ref in a form suitable for using as an argument to
|
||||||
|
`git log` (this is `<old>..<new>` in most cases, and
|
||||||
|
`<old>...<new>` for forced non-fast-forward updates).
|
||||||
|
|
||||||
|
from::
|
||||||
|
The name of the remote ref being fetched from, minus its
|
||||||
|
`refs/<type>/` prefix. In the case of deletion, the name of
|
||||||
|
the remote ref is "(none)".
|
||||||
|
|
||||||
|
to::
|
||||||
|
The name of the local ref being updated, minus its
|
||||||
|
`refs/<type>/` prefix.
|
||||||
|
|
||||||
|
reason::
|
||||||
|
A human-readable explanation. In the case of successfully fetched
|
||||||
|
refs, no explanation is needed. For a failed ref, the reason for
|
||||||
|
failure is described.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Update the remote-tracking branches:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git fetch origin
|
||||||
|
------------------------------------------------
|
||||||
|
+
|
||||||
|
The above command copies all branches from the remote `refs/heads/`
|
||||||
|
namespace and stores them to the local `refs/remotes/origin/` namespace,
|
||||||
|
unless the `remote.<repository>.fetch` option is used to specify a
|
||||||
|
non-default refspec.
|
||||||
|
|
||||||
|
* Using refspecs explicitly:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git fetch origin +seen:seen maint:tmp
|
||||||
|
------------------------------------------------
|
||||||
|
+
|
||||||
|
This updates (or creates, as necessary) branches `seen` and `tmp` in
|
||||||
|
the local repository by fetching from the branches (respectively)
|
||||||
|
`seen` and `maint` from the remote repository.
|
||||||
|
+
|
||||||
|
The `seen` branch will be updated even if it does not fast-forward,
|
||||||
|
because it is prefixed with a plus sign; `tmp` will not be.
|
||||||
|
|
||||||
|
* Peek at a remote's branch, without configuring the remote in your local
|
||||||
|
repository:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git fetch git://git.kernel.org/pub/scm/git/git.git maint
|
||||||
|
$ git log FETCH_HEAD
|
||||||
|
------------------------------------------------
|
||||||
|
+
|
||||||
|
The first command fetches the `maint` branch from the repository at
|
||||||
|
`git://git.kernel.org/pub/scm/git/git.git` and the second command uses
|
||||||
|
`FETCH_HEAD` to examine the branch with linkgit:git-log[1]. The fetched
|
||||||
|
objects will eventually be removed by git's built-in housekeeping (see
|
||||||
|
linkgit:git-gc[1]).
|
||||||
|
|
||||||
|
include::transfer-data-leaks.adoc[]
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/fetch.adoc[]
|
||||||
|
|
||||||
|
BUGS
|
||||||
|
----
|
||||||
|
Using `--recurse-submodules` can only fetch new commits in submodules that are
|
||||||
|
present locally e.g. in `$GIT_DIR/modules/`. If the upstream adds a new
|
||||||
|
submodule, that submodule cannot be fetched until it is cloned e.g. by `git
|
||||||
|
submodule update`. This is expected to be fixed in a future Git version.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-pull[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
703
app/src/main/assets/manpages/git-filter-branch.txt
Normal file
703
app/src/main/assets/manpages/git-filter-branch.txt
Normal file
@@ -0,0 +1,703 @@
|
|||||||
|
git-filter-branch(1)
|
||||||
|
====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-filter-branch - Rewrite branches
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git filter-branch' [--setup <command>] [--subdirectory-filter <directory>]
|
||||||
|
[--env-filter <command>] [--tree-filter <command>]
|
||||||
|
[--index-filter <command>] [--parent-filter <command>]
|
||||||
|
[--msg-filter <command>] [--commit-filter <command>]
|
||||||
|
[--tag-name-filter <command>] [--prune-empty]
|
||||||
|
[--original <namespace>] [-d <directory>] [-f | --force]
|
||||||
|
[--state-branch <branch>] [--] [<rev-list-options>...]
|
||||||
|
|
||||||
|
WARNING
|
||||||
|
-------
|
||||||
|
'git filter-branch' has a plethora of pitfalls that can produce non-obvious
|
||||||
|
manglings of the intended history rewrite (and can leave you with little
|
||||||
|
time to investigate such problems since it has such abysmal performance).
|
||||||
|
These safety and performance issues cannot be backward compatibly fixed and
|
||||||
|
as such, its use is not recommended. Please use an alternative history
|
||||||
|
filtering tool such as https://github.com/newren/git-filter-repo/[git
|
||||||
|
filter-repo]. If you still need to use 'git filter-branch', please
|
||||||
|
carefully read <<SAFETY>> (and <<PERFORMANCE>>) to learn about the land
|
||||||
|
mines of filter-branch, and then vigilantly avoid as many of the hazards
|
||||||
|
listed there as reasonably possible.
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Lets you rewrite Git revision history by rewriting the branches mentioned
|
||||||
|
in the <rev-list-options>, applying custom filters on each revision.
|
||||||
|
Those filters can modify each tree (e.g. removing a file or running
|
||||||
|
a perl rewrite on all files) or information about each commit.
|
||||||
|
Otherwise, all information (including original commit times or merge
|
||||||
|
information) will be preserved.
|
||||||
|
|
||||||
|
The command will only rewrite the _positive_ refs mentioned in the
|
||||||
|
command line (e.g. if you pass 'a..b', only 'b' will be rewritten).
|
||||||
|
If you specify no filters, the commits will be recommitted without any
|
||||||
|
changes, which would normally have no effect. Nevertheless, this may be
|
||||||
|
useful in the future for compensating for some Git bugs or such,
|
||||||
|
therefore such a usage is permitted.
|
||||||
|
|
||||||
|
*NOTE*: This command honors `.git/info/grafts` file and refs in
|
||||||
|
the `refs/replace/` namespace.
|
||||||
|
If you have any grafts or replacement refs defined, running this command
|
||||||
|
will make them permanent.
|
||||||
|
|
||||||
|
*WARNING*! The rewritten history will have different object names for all
|
||||||
|
the objects and will not converge with the original branch. You will not
|
||||||
|
be able to easily push and distribute the rewritten branch on top of the
|
||||||
|
original branch. Please do not use this command if you do not know the
|
||||||
|
full implications, and avoid using it anyway, if a simple single commit
|
||||||
|
would suffice to fix your problem. (See the "RECOVERING FROM UPSTREAM
|
||||||
|
REBASE" section in linkgit:git-rebase[1] for further information about
|
||||||
|
rewriting published history.)
|
||||||
|
|
||||||
|
Always verify that the rewritten version is correct: The original refs,
|
||||||
|
if different from the rewritten ones, will be stored in the namespace
|
||||||
|
'refs/original/'.
|
||||||
|
|
||||||
|
Note that since this operation is very I/O expensive, it might
|
||||||
|
be a good idea to redirect the temporary directory off-disk with the
|
||||||
|
`-d` option, e.g. on tmpfs. Reportedly the speedup is very noticeable.
|
||||||
|
|
||||||
|
|
||||||
|
Filters
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
The filters are applied in the order as listed below. The <command>
|
||||||
|
argument is always evaluated in the shell context using the 'eval' command
|
||||||
|
(with the notable exception of the commit filter, for technical reasons).
|
||||||
|
Prior to that, the `$GIT_COMMIT` environment variable will be set to contain
|
||||||
|
the id of the commit being rewritten. Also, GIT_AUTHOR_NAME,
|
||||||
|
GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL,
|
||||||
|
and GIT_COMMITTER_DATE are taken from the current commit and exported to
|
||||||
|
the environment, in order to affect the author and committer identities of
|
||||||
|
the replacement commit created by linkgit:git-commit-tree[1] after the
|
||||||
|
filters have run.
|
||||||
|
|
||||||
|
If any evaluation of <command> returns a non-zero exit status, the whole
|
||||||
|
operation will be aborted.
|
||||||
|
|
||||||
|
A 'map' function is available that takes an "original sha1 id" argument
|
||||||
|
and outputs a "rewritten sha1 id" if the commit has been already
|
||||||
|
rewritten, and "original sha1 id" otherwise; the 'map' function can
|
||||||
|
return several ids on separate lines if your commit filter emitted
|
||||||
|
multiple commits.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--setup <command>::
|
||||||
|
This is not a real filter executed for each commit but a one
|
||||||
|
time setup just before the loop. Therefore no commit-specific
|
||||||
|
variables are defined yet. Functions or variables defined here
|
||||||
|
can be used or modified in the following filter steps except
|
||||||
|
the commit filter, for technical reasons.
|
||||||
|
|
||||||
|
--subdirectory-filter <directory>::
|
||||||
|
Only look at the history which touches the given subdirectory.
|
||||||
|
The result will contain that directory (and only that) as its
|
||||||
|
project root. Implies <<Remap_to_ancestor>>.
|
||||||
|
|
||||||
|
--env-filter <command>::
|
||||||
|
This filter may be used if you only need to modify the environment
|
||||||
|
in which the commit will be performed. Specifically, you might
|
||||||
|
want to rewrite the author/committer name/email/time environment
|
||||||
|
variables (see linkgit:git-commit-tree[1] for details).
|
||||||
|
|
||||||
|
--tree-filter <command>::
|
||||||
|
This is the filter for rewriting the tree and its contents.
|
||||||
|
The argument is evaluated in shell with the working
|
||||||
|
directory set to the root of the checked out tree. The new tree
|
||||||
|
is then used as-is (new files are auto-added, disappeared files
|
||||||
|
are auto-removed - neither .gitignore files nor any other ignore
|
||||||
|
rules *HAVE ANY EFFECT*!).
|
||||||
|
|
||||||
|
--index-filter <command>::
|
||||||
|
This is the filter for rewriting the index. It is similar to the
|
||||||
|
tree filter but does not check out the tree, which makes it much
|
||||||
|
faster. Frequently used with `git rm --cached
|
||||||
|
--ignore-unmatch ...`, see EXAMPLES below. For hairy
|
||||||
|
cases, see linkgit:git-update-index[1].
|
||||||
|
|
||||||
|
--parent-filter <command>::
|
||||||
|
This is the filter for rewriting the commit's parent list.
|
||||||
|
It will receive the parent string on stdin and shall output
|
||||||
|
the new parent string on stdout. The parent string is in
|
||||||
|
the format described in linkgit:git-commit-tree[1]: empty for
|
||||||
|
the initial commit, "-p parent" for a normal commit and
|
||||||
|
"-p parent1 -p parent2 -p parent3 ..." for a merge commit.
|
||||||
|
|
||||||
|
--msg-filter <command>::
|
||||||
|
This is the filter for rewriting the commit messages.
|
||||||
|
The argument is evaluated in the shell with the original
|
||||||
|
commit message on standard input; its standard output is
|
||||||
|
used as the new commit message.
|
||||||
|
|
||||||
|
--commit-filter <command>::
|
||||||
|
This is the filter for performing the commit.
|
||||||
|
If this filter is specified, it will be called instead of the
|
||||||
|
'git commit-tree' command, with arguments of the form
|
||||||
|
"<TREE_ID> [(-p <PARENT_COMMIT_ID>)...]" and the log message on
|
||||||
|
stdin. The commit id is expected on stdout.
|
||||||
|
+
|
||||||
|
As a special extension, the commit filter may emit multiple
|
||||||
|
commit ids; in that case, the rewritten children of the original commit will
|
||||||
|
have all of them as parents.
|
||||||
|
+
|
||||||
|
You can use the 'map' convenience function in this filter, and other
|
||||||
|
convenience functions, too. For example, calling 'skip_commit "$@"'
|
||||||
|
will leave out the current commit (but not its changes! If you want
|
||||||
|
that, use 'git rebase' instead).
|
||||||
|
+
|
||||||
|
You can also use the `git_commit_non_empty_tree "$@"` instead of
|
||||||
|
`git commit-tree "$@"` if you don't wish to keep commits with a single parent
|
||||||
|
and that makes no change to the tree.
|
||||||
|
|
||||||
|
--tag-name-filter <command>::
|
||||||
|
This is the filter for rewriting tag names. When passed,
|
||||||
|
it will be called for every tag ref that points to a rewritten
|
||||||
|
object (or to a tag object which points to a rewritten object).
|
||||||
|
The original tag name is passed via standard input, and the new
|
||||||
|
tag name is expected on standard output.
|
||||||
|
+
|
||||||
|
The original tags are not deleted, but can be overwritten;
|
||||||
|
use "--tag-name-filter cat" to simply update the tags. In this
|
||||||
|
case, be very careful and make sure you have the old tags
|
||||||
|
backed up in case the conversion has run afoul.
|
||||||
|
+
|
||||||
|
Nearly proper rewriting of tag objects is supported. If the tag has
|
||||||
|
a message attached, a new tag object will be created with the same message,
|
||||||
|
author, and timestamp. If the tag has a signature attached, the
|
||||||
|
signature will be stripped. It is by definition impossible to preserve
|
||||||
|
signatures. The reason this is "nearly" proper, is because ideally if
|
||||||
|
the tag did not change (points to the same object, has the same name, etc.)
|
||||||
|
it should retain any signature. That is not the case, signatures will always
|
||||||
|
be removed, buyer beware. There is also no support for changing the
|
||||||
|
author or timestamp (or the tag message for that matter). Tags which point
|
||||||
|
to other tags will be rewritten to point to the underlying commit.
|
||||||
|
|
||||||
|
--prune-empty::
|
||||||
|
Some filters will generate empty commits that leave the tree untouched.
|
||||||
|
This option instructs git-filter-branch to remove such commits if they
|
||||||
|
have exactly one or zero non-pruned parents; merge commits will
|
||||||
|
therefore remain intact. This option cannot be used together with
|
||||||
|
`--commit-filter`, though the same effect can be achieved by using the
|
||||||
|
provided `git_commit_non_empty_tree` function in a commit filter.
|
||||||
|
|
||||||
|
--original <namespace>::
|
||||||
|
Use this option to set the namespace where the original commits
|
||||||
|
will be stored. The default value is 'refs/original'.
|
||||||
|
|
||||||
|
-d <directory>::
|
||||||
|
Use this option to set the path to the temporary directory used for
|
||||||
|
rewriting. When applying a tree filter, the command needs to
|
||||||
|
temporarily check out the tree to some directory, which may consume
|
||||||
|
considerable space in case of large projects. By default it
|
||||||
|
does this in the `.git-rewrite/` directory but you can override
|
||||||
|
that choice by this parameter.
|
||||||
|
|
||||||
|
-f::
|
||||||
|
--force::
|
||||||
|
'git filter-branch' refuses to start with an existing temporary
|
||||||
|
directory or when there are already refs starting with
|
||||||
|
'refs/original/', unless forced.
|
||||||
|
|
||||||
|
--state-branch <branch>::
|
||||||
|
This option will cause the mapping from old to new objects to
|
||||||
|
be loaded from named branch upon startup and saved as a new
|
||||||
|
commit to that branch upon exit, enabling incremental of large
|
||||||
|
trees. If '<branch>' does not exist it will be created.
|
||||||
|
|
||||||
|
<rev-list options>...::
|
||||||
|
Arguments for 'git rev-list'. All positive refs included by
|
||||||
|
these options are rewritten. You may also specify options
|
||||||
|
such as `--all`, but you must use `--` to separate them from
|
||||||
|
the 'git filter-branch' options. Implies <<Remap_to_ancestor>>.
|
||||||
|
|
||||||
|
|
||||||
|
[[Remap_to_ancestor]]
|
||||||
|
Remap to ancestor
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
By using linkgit:git-rev-list[1] arguments, e.g., path limiters, you can limit the
|
||||||
|
set of revisions which get rewritten. However, positive refs on the command
|
||||||
|
line are distinguished: we don't let them be excluded by such limiters. For
|
||||||
|
this purpose, they are instead rewritten to point at the nearest ancestor that
|
||||||
|
was not excluded.
|
||||||
|
|
||||||
|
|
||||||
|
EXIT STATUS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
On success, the exit status is `0`. If the filter can't find any commits to
|
||||||
|
rewrite, the exit status is `2`. On any other error, the exit status may be
|
||||||
|
any other non-zero value.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Suppose you want to remove a file (containing confidential information
|
||||||
|
or copyright violation) from all commits:
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
git filter-branch --tree-filter 'rm filename' HEAD
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
However, if the file is absent from the tree of some commit,
|
||||||
|
a simple `rm filename` will fail for that tree and commit.
|
||||||
|
Thus you may instead want to use `rm -f filename` as the script.
|
||||||
|
|
||||||
|
Using `--index-filter` with 'git rm' yields a significantly faster
|
||||||
|
version. Like with using `rm filename`, `git rm --cached filename`
|
||||||
|
will fail if the file is absent from the tree of a commit. If you
|
||||||
|
want to "completely forget" a file, it does not matter when it entered
|
||||||
|
history, so we also add `--ignore-unmatch`:
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Now, you will get the rewritten history saved in HEAD.
|
||||||
|
|
||||||
|
To rewrite the repository to look as if `foodir/` had been its project
|
||||||
|
root, and discard all other history:
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
git filter-branch --subdirectory-filter foodir -- --all
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
Thus you can, e.g., turn a library subdirectory into a repository of
|
||||||
|
its own. Note the `--` that separates 'filter-branch' options from
|
||||||
|
revision options, and the `--all` to rewrite all branches and tags.
|
||||||
|
|
||||||
|
To set a commit (which typically is at the tip of another
|
||||||
|
history) to be the parent of the current initial commit, in
|
||||||
|
order to paste the other history behind the current history:
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
git filter-branch --parent-filter 'sed "s/^\$/-p <graft-id>/"' HEAD
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
|
(if the parent string is empty - which happens when we are dealing with
|
||||||
|
the initial commit - add graftcommit as a parent). Note that this assumes
|
||||||
|
history with a single root (that is, no merge without common ancestors
|
||||||
|
happened). If this is not the case, use:
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
git filter-branch --parent-filter \
|
||||||
|
'test $GIT_COMMIT = <commit-id> && echo "-p <graft-id>" || cat' HEAD
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
or even simpler:
|
||||||
|
|
||||||
|
-----------------------------------------------
|
||||||
|
git replace --graft $commit-id $graft-id
|
||||||
|
git filter-branch $graft-id..HEAD
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
To remove commits authored by "Darl McBribe" from the history:
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
git filter-branch --commit-filter '
|
||||||
|
if [ "$GIT_AUTHOR_NAME" = "Darl McBribe" ];
|
||||||
|
then
|
||||||
|
skip_commit "$@";
|
||||||
|
else
|
||||||
|
git commit-tree "$@";
|
||||||
|
fi' HEAD
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
The function 'skip_commit' is defined as follows:
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
skip_commit()
|
||||||
|
{
|
||||||
|
shift;
|
||||||
|
while [ -n "$1" ];
|
||||||
|
do
|
||||||
|
shift;
|
||||||
|
map "$1";
|
||||||
|
shift;
|
||||||
|
done;
|
||||||
|
}
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
The shift magic first throws away the tree id and then the -p
|
||||||
|
parameters. Note that this handles merges properly! In case Darl
|
||||||
|
committed a merge between P1 and P2, it will be propagated properly
|
||||||
|
and all children of the merge will become merge commits with P1,P2
|
||||||
|
as their parents instead of the merge commit.
|
||||||
|
|
||||||
|
*NOTE* the changes introduced by the commits, and which are not reverted
|
||||||
|
by subsequent commits, will still be in the rewritten branch. If you want
|
||||||
|
to throw out _changes_ together with the commits, you should use the
|
||||||
|
interactive mode of 'git rebase'.
|
||||||
|
|
||||||
|
You can rewrite the commit log messages using `--msg-filter`. For
|
||||||
|
example, 'git svn-id' strings in a repository created by 'git svn' can
|
||||||
|
be removed this way:
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
git filter-branch --msg-filter '
|
||||||
|
sed -e "/^git-svn-id:/d"
|
||||||
|
'
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
If you need to add 'Acked-by' lines to, say, the last 10 commits (none
|
||||||
|
of which is a merge), use this command:
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
git filter-branch --msg-filter '
|
||||||
|
cat &&
|
||||||
|
echo "Acked-by: Bugs Bunny <bunny@bugzilla.org>"
|
||||||
|
' HEAD~10..HEAD
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
The `--env-filter` option can be used to modify committer and/or author
|
||||||
|
identity. For example, if you found out that your commits have the wrong
|
||||||
|
identity due to a misconfigured user.email, you can make a correction,
|
||||||
|
before publishing the project, like this:
|
||||||
|
|
||||||
|
--------------------------------------------------------
|
||||||
|
git filter-branch --env-filter '
|
||||||
|
if test "$GIT_AUTHOR_EMAIL" = "root@localhost"
|
||||||
|
then
|
||||||
|
GIT_AUTHOR_EMAIL=john@example.com
|
||||||
|
fi
|
||||||
|
if test "$GIT_COMMITTER_EMAIL" = "root@localhost"
|
||||||
|
then
|
||||||
|
GIT_COMMITTER_EMAIL=john@example.com
|
||||||
|
fi
|
||||||
|
' -- --all
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
To restrict rewriting to only part of the history, specify a revision
|
||||||
|
range in addition to the new branch name. The new branch name will
|
||||||
|
point to the top-most revision that a 'git rev-list' of this range
|
||||||
|
will print.
|
||||||
|
|
||||||
|
Consider this history:
|
||||||
|
|
||||||
|
------------------
|
||||||
|
D--E--F--G--H
|
||||||
|
/ /
|
||||||
|
A--B-----C
|
||||||
|
------------------
|
||||||
|
|
||||||
|
To rewrite only commits D,E,F,G,H, but leave A, B and C alone, use:
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
git filter-branch ... C..H
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
To rewrite commits E,F,G,H, use one of these:
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
git filter-branch ... C..H --not D
|
||||||
|
git filter-branch ... D..H --not C
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
To move the whole tree into a subdirectory, or remove it from there:
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
git filter-branch --index-filter \
|
||||||
|
'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
|
||||||
|
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
|
||||||
|
git update-index --index-info &&
|
||||||
|
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CHECKLIST FOR SHRINKING A REPOSITORY
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
git-filter-branch can be used to get rid of a subset of files,
|
||||||
|
usually with some combination of `--index-filter` and
|
||||||
|
`--subdirectory-filter`. People expect the resulting repository to
|
||||||
|
be smaller than the original, but you need a few more steps to
|
||||||
|
actually make it smaller, because Git tries hard not to lose your
|
||||||
|
objects until you tell it to. First make sure that:
|
||||||
|
|
||||||
|
* You really removed all variants of a filename, if a blob was moved
|
||||||
|
over its lifetime. `git log --name-only --follow --all -- filename`
|
||||||
|
can help you find renames.
|
||||||
|
|
||||||
|
* You really filtered all refs: use `--tag-name-filter cat -- --all`
|
||||||
|
when calling git-filter-branch.
|
||||||
|
|
||||||
|
Then there are two ways to get a smaller repository. A safer way is
|
||||||
|
to clone, that keeps your original intact.
|
||||||
|
|
||||||
|
* Clone it with `git clone file:///path/to/repo`. The clone
|
||||||
|
will not have the removed objects. See linkgit:git-clone[1]. (Note
|
||||||
|
that cloning with a plain path just hardlinks everything!)
|
||||||
|
|
||||||
|
If you really don't want to clone it, for whatever reasons, check the
|
||||||
|
following points instead (in this order). This is a very destructive
|
||||||
|
approach, so *make a backup* or go back to cloning it. You have been
|
||||||
|
warned.
|
||||||
|
|
||||||
|
* Remove the original refs backed up by git-filter-branch: say `git
|
||||||
|
for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git
|
||||||
|
update-ref -d`.
|
||||||
|
|
||||||
|
* Expire all reflogs with `git reflog expire --expire=now --all`.
|
||||||
|
|
||||||
|
* Garbage collect all unreferenced objects with `git gc --prune=now`
|
||||||
|
(or if your git-gc is not new enough to support arguments to
|
||||||
|
`--prune`, use `git repack -ad; git prune` instead).
|
||||||
|
|
||||||
|
[[PERFORMANCE]]
|
||||||
|
PERFORMANCE
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The performance of git-filter-branch is glacially slow; its design makes it
|
||||||
|
impossible for a backward-compatible implementation to ever be fast:
|
||||||
|
|
||||||
|
* In editing files, git-filter-branch by design checks out each and
|
||||||
|
every commit as it existed in the original repo. If your repo has
|
||||||
|
`10^5` files and `10^5` commits, but each commit only modifies five
|
||||||
|
files, then git-filter-branch will make you do `10^10` modifications,
|
||||||
|
despite only having (at most) `5*10^5` unique blobs.
|
||||||
|
|
||||||
|
* If you try and cheat and try to make git-filter-branch only work on
|
||||||
|
files modified in a commit, then two things happen
|
||||||
|
|
||||||
|
** you run into problems with deletions whenever the user is simply
|
||||||
|
trying to rename files (because attempting to delete files that
|
||||||
|
don't exist looks like a no-op; it takes some chicanery to remap
|
||||||
|
deletes across file renames when the renames happen via arbitrary
|
||||||
|
user-provided shell)
|
||||||
|
|
||||||
|
** even if you succeed at the map-deletes-for-renames chicanery, you
|
||||||
|
still technically violate backward compatibility because users
|
||||||
|
are allowed to filter files in ways that depend upon topology of
|
||||||
|
commits instead of filtering solely based on file contents or
|
||||||
|
names (though this has not been observed in the wild).
|
||||||
|
|
||||||
|
* Even if you don't need to edit files but only want to e.g. rename or
|
||||||
|
remove some and thus can avoid checking out each file (i.e. you can
|
||||||
|
use --index-filter), you still are passing shell snippets for your
|
||||||
|
filters. This means that for every commit, you have to have a
|
||||||
|
prepared git repo where those filters can be run. That's a
|
||||||
|
significant setup.
|
||||||
|
|
||||||
|
* Further, several additional files are created or updated per commit
|
||||||
|
by git-filter-branch. Some of these are for supporting the
|
||||||
|
convenience functions provided by git-filter-branch (such as map()),
|
||||||
|
while others are for keeping track of internal state (but could have
|
||||||
|
also been accessed by user filters; one of git-filter-branch's
|
||||||
|
regression tests does so). This essentially amounts to using the
|
||||||
|
filesystem as an IPC mechanism between git-filter-branch and the
|
||||||
|
user-provided filters. Disks tend to be a slow IPC mechanism, and
|
||||||
|
writing these files also effectively represents a forced
|
||||||
|
synchronization point between separate processes that we hit with
|
||||||
|
every commit.
|
||||||
|
|
||||||
|
* The user-provided shell commands will likely involve a pipeline of
|
||||||
|
commands, resulting in the creation of many processes per commit.
|
||||||
|
Creating and running another process takes a widely varying amount
|
||||||
|
of time between operating systems, but on any platform it is very
|
||||||
|
slow relative to invoking a function.
|
||||||
|
|
||||||
|
* git-filter-branch itself is written in shell, which is kind of slow.
|
||||||
|
This is the one performance issue that could be backward-compatibly
|
||||||
|
fixed, but compared to the above problems that are intrinsic to the
|
||||||
|
design of git-filter-branch, the language of the tool itself is a
|
||||||
|
relatively minor issue.
|
||||||
|
|
||||||
|
** Side note: Unfortunately, people tend to fixate on the
|
||||||
|
written-in-shell aspect and periodically ask if git-filter-branch
|
||||||
|
could be rewritten in another language to fix the performance
|
||||||
|
issues. Not only does that ignore the bigger intrinsic problems
|
||||||
|
with the design, it'd help less than you'd expect: if
|
||||||
|
git-filter-branch itself were not shell, then the convenience
|
||||||
|
functions (map(), skip_commit(), etc) and the `--setup` argument
|
||||||
|
could no longer be executed once at the beginning of the program
|
||||||
|
but would instead need to be prepended to every user filter (and
|
||||||
|
thus re-executed with every commit).
|
||||||
|
|
||||||
|
The https://github.com/newren/git-filter-repo/[git filter-repo] tool is
|
||||||
|
an alternative to git-filter-branch which does not suffer from these
|
||||||
|
performance problems or the safety problems (mentioned below). For those
|
||||||
|
with existing tooling which relies upon git-filter-branch, 'git
|
||||||
|
filter-repo' also provides
|
||||||
|
https://github.com/newren/git-filter-repo/blob/master/contrib/filter-repo-demos/filter-lamely[filter-lamely],
|
||||||
|
a drop-in git-filter-branch replacement (with a few caveats). While
|
||||||
|
filter-lamely suffers from all the same safety issues as
|
||||||
|
git-filter-branch, it at least ameliorates the performance issues a
|
||||||
|
little.
|
||||||
|
|
||||||
|
[[SAFETY]]
|
||||||
|
SAFETY
|
||||||
|
------
|
||||||
|
|
||||||
|
git-filter-branch is riddled with gotchas resulting in various ways to
|
||||||
|
easily corrupt repos or end up with a mess worse than what you started
|
||||||
|
with:
|
||||||
|
|
||||||
|
* Someone can have a set of "working and tested filters" which they
|
||||||
|
document or provide to a coworker, who then runs them on a different
|
||||||
|
OS where the same commands are not working/tested (some examples in
|
||||||
|
the git-filter-branch manpage are also affected by this).
|
||||||
|
BSD vs. GNU userland differences can really bite. If lucky, error
|
||||||
|
messages are spewed. But just as likely, the commands either don't
|
||||||
|
do the filtering requested, or silently corrupt by making some
|
||||||
|
unwanted change. The unwanted change may only affect a few commits,
|
||||||
|
so it's not necessarily obvious either. (The fact that problems
|
||||||
|
won't necessarily be obvious means they are likely to go unnoticed
|
||||||
|
until the rewritten history is in use for quite a while, at which
|
||||||
|
point it's really hard to justify another flag-day for another
|
||||||
|
rewrite.)
|
||||||
|
|
||||||
|
* Filenames with spaces are often mishandled by shell snippets since
|
||||||
|
they cause problems for shell pipelines. Not everyone is familiar
|
||||||
|
with find -print0, xargs -0, git-ls-files -z, etc. Even people who
|
||||||
|
are familiar with these may assume such flags are not relevant
|
||||||
|
because someone else renamed any such files in their repo back
|
||||||
|
before the person doing the filtering joined the project. And
|
||||||
|
often, even those familiar with handling arguments with spaces may
|
||||||
|
not do so just because they aren't in the mindset of thinking about
|
||||||
|
everything that could possibly go wrong.
|
||||||
|
|
||||||
|
* Non-ascii filenames can be silently removed despite being in a
|
||||||
|
desired directory. Keeping only wanted paths is often done using
|
||||||
|
pipelines like `git ls-files | grep -v ^WANTED_DIR/ | xargs git rm`.
|
||||||
|
ls-files will only quote filenames if needed, so folks may not
|
||||||
|
notice that one of the files didn't match the regex (at least not
|
||||||
|
until it's much too late). Yes, someone who knows about
|
||||||
|
core.quotePath can avoid this (unless they have other special
|
||||||
|
characters like \t, \n, or "), and people who use ls-files -z with
|
||||||
|
something other than grep can avoid this, but that doesn't mean they
|
||||||
|
will.
|
||||||
|
|
||||||
|
* Similarly, when moving files around, one can find that filenames
|
||||||
|
with non-ascii or special characters end up in a different
|
||||||
|
directory, one that includes a double quote character. (This is
|
||||||
|
technically the same issue as above with quoting, but perhaps an
|
||||||
|
interesting different way that it can and has manifested as a
|
||||||
|
problem.)
|
||||||
|
|
||||||
|
* It's far too easy to accidentally mix up old and new history. It's
|
||||||
|
still possible with any tool, but git-filter-branch almost
|
||||||
|
invites it. If lucky, the only downside is users getting frustrated
|
||||||
|
that they don't know how to shrink their repo and remove the old
|
||||||
|
stuff. If unlucky, they merge old and new history and end up with
|
||||||
|
multiple "copies" of each commit, some of which have unwanted or
|
||||||
|
sensitive files and others which don't. This comes about in
|
||||||
|
multiple different ways:
|
||||||
|
|
||||||
|
** the default to only doing a partial history rewrite ('--all' is not
|
||||||
|
the default and few examples show it)
|
||||||
|
|
||||||
|
** the fact that there's no automatic post-run cleanup
|
||||||
|
|
||||||
|
** the fact that --tag-name-filter (when used to rename tags) doesn't
|
||||||
|
remove the old tags but just adds new ones with the new name
|
||||||
|
|
||||||
|
** the fact that little educational information is provided to inform
|
||||||
|
users of the ramifications of a rewrite and how to avoid mixing old
|
||||||
|
and new history. For example, this man page discusses how users
|
||||||
|
need to understand that they need to rebase their changes for all
|
||||||
|
their branches on top of new history (or delete and reclone), but
|
||||||
|
that's only one of multiple concerns to consider. See the
|
||||||
|
"DISCUSSION" section of the git filter-repo manual page for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
* Annotated tags can be accidentally converted to lightweight tags,
|
||||||
|
due to either of two issues:
|
||||||
|
|
||||||
|
** Someone can do a history rewrite, realize they messed up, restore
|
||||||
|
from the backups in refs/original/, and then redo their
|
||||||
|
git-filter-branch command. (The backup in refs/original/ is not a
|
||||||
|
real backup; it dereferences tags first.)
|
||||||
|
|
||||||
|
** Running git-filter-branch with either --tags or --all in your
|
||||||
|
<rev-list-options>. In order to retain annotated tags as
|
||||||
|
annotated, you must use --tag-name-filter (and must not have
|
||||||
|
restored from refs/original/ in a previously botched rewrite).
|
||||||
|
|
||||||
|
* Any commit messages that specify an encoding will become corrupted
|
||||||
|
by the rewrite; git-filter-branch ignores the encoding, takes the
|
||||||
|
original bytes, and feeds it to commit-tree without telling it the
|
||||||
|
proper encoding. (This happens whether or not --msg-filter is
|
||||||
|
used.)
|
||||||
|
|
||||||
|
* Commit messages (even if they are all UTF-8) by default become
|
||||||
|
corrupted due to not being updated -- any references to other commit
|
||||||
|
hashes in commit messages will now refer to no-longer-extant
|
||||||
|
commits.
|
||||||
|
|
||||||
|
* There are no facilities for helping users find what unwanted crud
|
||||||
|
they should delete, which means they are much more likely to have
|
||||||
|
incomplete or partial cleanups that sometimes result in confusion
|
||||||
|
and people wasting time trying to understand. (For example, folks
|
||||||
|
tend to just look for big files to delete instead of big directories
|
||||||
|
or extensions, and once they do so, then sometime later folks using
|
||||||
|
the new repository who are going through history will notice a build
|
||||||
|
artifact directory that has some files but not others, or a cache of
|
||||||
|
dependencies (node_modules or similar) which couldn't have ever been
|
||||||
|
functional since it's missing some files.)
|
||||||
|
|
||||||
|
* If --prune-empty isn't specified, then the filtering process can
|
||||||
|
create hoards of confusing empty commits
|
||||||
|
|
||||||
|
* If --prune-empty is specified, then intentionally placed empty
|
||||||
|
commits from before the filtering operation are also pruned instead
|
||||||
|
of just pruning commits that became empty due to filtering rules.
|
||||||
|
|
||||||
|
* If --prune-empty is specified, sometimes empty commits are missed
|
||||||
|
and left around anyway (a somewhat rare bug, but it happens...)
|
||||||
|
|
||||||
|
* A minor issue, but users who have a goal to update all names and
|
||||||
|
emails in a repository may be led to --env-filter which will only
|
||||||
|
update authors and committers, missing taggers.
|
||||||
|
|
||||||
|
* If the user provides a --tag-name-filter that maps multiple tags to
|
||||||
|
the same name, no warning or error is provided; git-filter-branch
|
||||||
|
simply overwrites each tag in some undocumented pre-defined order
|
||||||
|
resulting in only one tag at the end. (A git-filter-branch
|
||||||
|
regression test requires this surprising behavior.)
|
||||||
|
|
||||||
|
Also, the poor performance of git-filter-branch often leads to safety
|
||||||
|
issues:
|
||||||
|
|
||||||
|
* Coming up with the correct shell snippet to do the filtering you
|
||||||
|
want is sometimes difficult unless you're just doing a trivial
|
||||||
|
modification such as deleting a couple files. Unfortunately, people
|
||||||
|
often learn if the snippet is right or wrong by trying it out, but
|
||||||
|
the rightness or wrongness can vary depending on special
|
||||||
|
circumstances (spaces in filenames, non-ascii filenames, funny
|
||||||
|
author names or emails, invalid timezones, presence of grafts or
|
||||||
|
replace objects, etc.), meaning they may have to wait a long time,
|
||||||
|
hit an error, then restart. The performance of git-filter-branch is
|
||||||
|
so bad that this cycle is painful, reducing the time available to
|
||||||
|
carefully re-check (to say nothing about what it does to the
|
||||||
|
patience of the person doing the rewrite even if they do technically
|
||||||
|
have more time available). This problem is extra compounded because
|
||||||
|
errors from broken filters may not be shown for a long time and/or
|
||||||
|
get lost in a sea of output. Even worse, broken filters often just
|
||||||
|
result in silent incorrect rewrites.
|
||||||
|
|
||||||
|
* To top it all off, even when users finally find working commands,
|
||||||
|
they naturally want to share them. But they may be unaware that
|
||||||
|
their repo didn't have some special cases that someone else's does.
|
||||||
|
So, when someone else with a different repository runs the same
|
||||||
|
commands, they get hit by the problems above. Or, the user just
|
||||||
|
runs commands that really were vetted for special cases, but they
|
||||||
|
run it on a different OS where it doesn't work, as noted above.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
83
app/src/main/assets/manpages/git-fmt-merge-msg.txt
Normal file
83
app/src/main/assets/manpages/git-fmt-merge-msg.txt
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
git-fmt-merge-msg(1)
|
||||||
|
====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fmt-merge-msg - Produce a merge commit message
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git fmt-merge-msg' [-m <message>] [--into-name <branch>] [--log[=<n>] | --no-log]
|
||||||
|
'git fmt-merge-msg' [-m <message>] [--log[=<n>] | --no-log] -F <file>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Takes the list of merged objects on stdin and produces a suitable
|
||||||
|
commit message to be used for the merge commit, usually to be
|
||||||
|
passed as the '<merge-message>' argument of 'git merge'.
|
||||||
|
|
||||||
|
This command is intended mostly for internal use by scripts
|
||||||
|
automatically invoking 'git merge'.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--log[=<n>]::
|
||||||
|
In addition to branch names, populate the log message with
|
||||||
|
one-line descriptions from the actual commits that are being
|
||||||
|
merged. At most <n> commits from each merge parent will be
|
||||||
|
used (20 if <n> is omitted). This overrides the `merge.log`
|
||||||
|
configuration variable.
|
||||||
|
|
||||||
|
--no-log::
|
||||||
|
Do not list one-line descriptions from the actual commits being
|
||||||
|
merged.
|
||||||
|
|
||||||
|
--summary::
|
||||||
|
--no-summary::
|
||||||
|
Synonyms to --log and --no-log; these are deprecated and will be
|
||||||
|
removed in the future.
|
||||||
|
|
||||||
|
-m <message>::
|
||||||
|
--message <message>::
|
||||||
|
Use <message> instead of the branch names for the first line
|
||||||
|
of the log message. For use with `--log`.
|
||||||
|
|
||||||
|
--into-name <branch>::
|
||||||
|
Prepare the merge message as if merging to the branch `<branch>`,
|
||||||
|
instead of the name of the real branch to which the merge is made.
|
||||||
|
|
||||||
|
-F <file>::
|
||||||
|
--file <file>::
|
||||||
|
Take the list of merged objects from <file> instead of
|
||||||
|
stdin.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
include::config/fmt-merge-msg.adoc[]
|
||||||
|
|
||||||
|
merge.summary::
|
||||||
|
Synonym to `merge.log`; this is deprecated and will be removed in
|
||||||
|
the future.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
---------
|
||||||
|
$ git fetch origin master
|
||||||
|
$ git fmt-merge-msg --log <$GIT_DIR/FETCH_HEAD
|
||||||
|
---------
|
||||||
|
|
||||||
|
Print a log message describing a merge of the "master" branch from
|
||||||
|
the "origin" remote.
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-merge[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
476
app/src/main/assets/manpages/git-for-each-ref.txt
Normal file
476
app/src/main/assets/manpages/git-for-each-ref.txt
Normal file
@@ -0,0 +1,476 @@
|
|||||||
|
git-for-each-ref(1)
|
||||||
|
===================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-for-each-ref - Output information on each ref
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
|
||||||
|
[(--sort=<key>)...] [--format=<format>]
|
||||||
|
[--include-root-refs] [--points-at=<object>]
|
||||||
|
[--merged[=<object>]] [--no-merged[=<object>]]
|
||||||
|
[--contains[=<object>]] [--no-contains[=<object>]]
|
||||||
|
[(--exclude=<pattern>)...] [--start-after=<marker>]
|
||||||
|
[ --stdin | (<pattern>...)]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Iterate over all refs that match _<pattern>_ and show them
|
||||||
|
according to the given _<format>_, after sorting them according
|
||||||
|
to the given set of _<key>_. If _<count>_ is given, stop after
|
||||||
|
showing that many refs. The interpolated values in _<format>_
|
||||||
|
can optionally be quoted as string literals in the specified
|
||||||
|
host language allowing their direct evaluation in that language.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
include::for-each-ref-options.adoc[]
|
||||||
|
|
||||||
|
FIELD NAMES
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Various values from structured fields in referenced objects can
|
||||||
|
be used to interpolate into the resulting output, or as sort
|
||||||
|
keys.
|
||||||
|
|
||||||
|
For all objects, the following names can be used:
|
||||||
|
|
||||||
|
`refname`::
|
||||||
|
The name of the ref (the part after `$GIT_DIR/`).
|
||||||
|
For a non-ambiguous short name of the ref append `:short`.
|
||||||
|
The option `core.warnAmbiguousRefs` is used to select the strict
|
||||||
|
abbreviation mode. If `lstrip=<n>` (`rstrip=<n>`) is appended, strip _<n>_
|
||||||
|
slash-separated path components from the front (back) of the refname
|
||||||
|
(e.g. `%(refname:lstrip=2)` turns `refs/tags/foo` into `foo` and
|
||||||
|
`%(refname:rstrip=2)` turns `refs/tags/foo` into `refs`).
|
||||||
|
If _<n>_ is a negative number, strip as many path components as
|
||||||
|
necessary from the specified end to leave `-<n>` path components
|
||||||
|
(e.g. `%(refname:lstrip=-2)` turns
|
||||||
|
`refs/tags/foo` into `tags/foo` and `%(refname:rstrip=-1)`
|
||||||
|
turns `refs/tags/foo` into `refs`). When the ref does not have
|
||||||
|
enough components, the result becomes an empty string if
|
||||||
|
stripping with positive _<n>_, or it becomes the full refname if
|
||||||
|
stripping with negative _<N>_. Neither is an error.
|
||||||
|
+
|
||||||
|
`strip` can be used as a synonym to `lstrip`.
|
||||||
|
|
||||||
|
`objecttype`::
|
||||||
|
The type of the object (`blob`, `tree`, `commit`, `tag`).
|
||||||
|
|
||||||
|
`objectsize`::
|
||||||
|
The size of the object (the same as 'git cat-file -s' reports).
|
||||||
|
Append `:disk` to get the size, in bytes, that the object takes up on
|
||||||
|
disk. See the note about on-disk sizes in the 'CAVEATS' section below.
|
||||||
|
`objectname`::
|
||||||
|
The object name (aka SHA-1).
|
||||||
|
For a non-ambiguous abbreviation of the object name append `:short`.
|
||||||
|
For an abbreviation of the object name with desired length append
|
||||||
|
`:short=<length>`, where the minimum length is `MINIMUM_ABBREV`. The
|
||||||
|
length may be exceeded to ensure unique object names.
|
||||||
|
`deltabase`::
|
||||||
|
This expands to the object name of the delta base for the
|
||||||
|
given object, if it is stored as a delta. Otherwise it
|
||||||
|
expands to the null object name (all zeroes).
|
||||||
|
|
||||||
|
`upstream`::
|
||||||
|
The name of a local ref which can be considered ``upstream''
|
||||||
|
from the displayed ref. Respects `:short`, `:lstrip` and
|
||||||
|
`:rstrip` in the same way as `refname` above. Additionally
|
||||||
|
respects `:track` to show "[ahead N, behind M]" and
|
||||||
|
`:trackshort` to show the terse version: ">" (ahead), "<"
|
||||||
|
(behind), "<>" (ahead and behind), or "=" (in sync). `:track`
|
||||||
|
also prints "[gone]" whenever unknown upstream ref is
|
||||||
|
encountered. Append `:track,nobracket` to show tracking
|
||||||
|
information without brackets (i.e "ahead N, behind M").
|
||||||
|
+
|
||||||
|
For any remote-tracking branch `%(upstream)`, `%(upstream:remotename)`
|
||||||
|
and `%(upstream:remoteref)` refer to the name of the remote and the
|
||||||
|
name of the tracked remote ref, respectively. In other words, the
|
||||||
|
remote-tracking branch can be updated explicitly and individually by
|
||||||
|
using the refspec `%(upstream:remoteref):%(upstream)` to fetch from
|
||||||
|
`%(upstream:remotename)`.
|
||||||
|
+
|
||||||
|
Has no effect if the ref does not have tracking information associated
|
||||||
|
with it. All the options apart from `nobracket` are mutually exclusive,
|
||||||
|
but if used together the last option is selected.
|
||||||
|
|
||||||
|
`push`::
|
||||||
|
The name of a local ref which represents the `@{push}`
|
||||||
|
location for the displayed ref. Respects `:short`, `:lstrip`,
|
||||||
|
`:rstrip`, `:track`, `:trackshort`, `:remotename`, and `:remoteref`
|
||||||
|
options as `upstream` does. Produces an empty string if no `@{push}`
|
||||||
|
ref is configured.
|
||||||
|
|
||||||
|
`HEAD`::
|
||||||
|
`*` if `HEAD` matches current ref (the checked out branch), ' '
|
||||||
|
otherwise.
|
||||||
|
|
||||||
|
`color`::
|
||||||
|
Change output color. Followed by `:<colorname>`, where color
|
||||||
|
names are described under Values in the "CONFIGURATION FILE"
|
||||||
|
section of linkgit:git-config[1]. For example,
|
||||||
|
`%(color:bold red)`.
|
||||||
|
|
||||||
|
`align`::
|
||||||
|
Left-, middle-, or right-align the content between
|
||||||
|
`%(align:...)` and `%(end)`. The "`align:`" is followed by
|
||||||
|
`width=<width>` and `position=<position>` in any order
|
||||||
|
separated by a comma, where the _<position>_ is either `left`,
|
||||||
|
`right` or `middle`, default being `left` and _<width>_ is the total
|
||||||
|
length of the content with alignment. For brevity, the
|
||||||
|
"width=" and/or "position=" prefixes may be omitted, and bare
|
||||||
|
_<width>_ and _<position>_ used instead. For instance,
|
||||||
|
`%(align:<width>,<position>)`. If the contents length is more
|
||||||
|
than the width then no alignment is performed. If used with
|
||||||
|
`--quote` everything in between `%(align:...)` and `%(end)` is
|
||||||
|
quoted, but if nested then only the topmost level performs
|
||||||
|
quoting.
|
||||||
|
|
||||||
|
`if`::
|
||||||
|
Used as `%(if)...%(then)...%(end)` or
|
||||||
|
`%(if)...%(then)...%(else)...%(end)`. If there is an atom with
|
||||||
|
value or string literal after the `%(if)` then everything after
|
||||||
|
the `%(then)` is printed, else if the `%(else)` atom is used, then
|
||||||
|
everything after %(else) is printed. We ignore space when
|
||||||
|
evaluating the string before `%(then)`, this is useful when we
|
||||||
|
use the `%(HEAD)` atom which prints either "`*`" or " " and we
|
||||||
|
want to apply the 'if' condition only on the `HEAD` ref.
|
||||||
|
Append "`:equals=<string>`" or "`:notequals=<string>`" to compare
|
||||||
|
the value between the `%(if:...)` and `%(then)` atoms with the
|
||||||
|
given string.
|
||||||
|
|
||||||
|
`symref`::
|
||||||
|
The ref which the given symbolic ref refers to. If not a
|
||||||
|
symbolic ref, nothing is printed. Respects the `:short`,
|
||||||
|
`:lstrip` and `:rstrip` options in the same way as `refname`
|
||||||
|
above.
|
||||||
|
|
||||||
|
`signature`::
|
||||||
|
The GPG signature of a commit.
|
||||||
|
|
||||||
|
`signature:grade`::
|
||||||
|
Show
|
||||||
|
`G`;; for a good (valid) signature
|
||||||
|
`B`;; for a bad signature
|
||||||
|
`U`;; for a good signature with unknown validity
|
||||||
|
`X`;; for a good signature that has expired
|
||||||
|
`Y`;; for a good signature made by an expired key
|
||||||
|
`R`;; for a good signature made by a revoked key
|
||||||
|
`E`;; if the signature cannot be checked (e.g. missing key)
|
||||||
|
`N`;; for no signature.
|
||||||
|
|
||||||
|
`signature:signer`::
|
||||||
|
The signer of the GPG signature of a commit.
|
||||||
|
|
||||||
|
`signature:key`::
|
||||||
|
The key of the GPG signature of a commit.
|
||||||
|
|
||||||
|
`signature:fingerprint`::
|
||||||
|
The fingerprint of the GPG signature of a commit.
|
||||||
|
|
||||||
|
`signature:primarykeyfingerprint`::
|
||||||
|
The primary key fingerprint of the GPG signature of a commit.
|
||||||
|
|
||||||
|
`signature:trustlevel`::
|
||||||
|
The trust level of the GPG signature of a commit. Possible
|
||||||
|
outputs are `ultimate`, `fully`, `marginal`, `never` and `undefined`.
|
||||||
|
|
||||||
|
`worktreepath`::
|
||||||
|
The absolute path to the worktree in which the ref is checked
|
||||||
|
out, if it is checked out in any linked worktree. Empty string
|
||||||
|
otherwise.
|
||||||
|
|
||||||
|
`ahead-behind:<commit-ish>`::
|
||||||
|
Two integers, separated by a space, demonstrating the number of
|
||||||
|
commits ahead and behind, respectively, when comparing the output
|
||||||
|
ref to the _<committish>_ specified in the format.
|
||||||
|
|
||||||
|
`is-base:<commit-ish>`::
|
||||||
|
In at most one row, `(<commit-ish>)` will appear to indicate the ref
|
||||||
|
that is most likely the ref used as a starting point for the branch
|
||||||
|
that produced _<commit-ish>_. This choice is made using a heuristic:
|
||||||
|
choose the ref that minimizes the number of commits in the
|
||||||
|
first-parent history of _<commit-ish>_ and not in the first-parent
|
||||||
|
history of the ref.
|
||||||
|
+
|
||||||
|
For example, consider the following figure of first-parent histories of
|
||||||
|
several refs:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
*--*--*--*--*--* refs/heads/A
|
||||||
|
\
|
||||||
|
\
|
||||||
|
*--*--*--* refs/heads/B
|
||||||
|
\ \
|
||||||
|
\ \
|
||||||
|
* * refs/heads/C
|
||||||
|
\
|
||||||
|
\
|
||||||
|
*--* refs/heads/D
|
||||||
|
----
|
||||||
|
+
|
||||||
|
Here, if `A`, `B`, and `C` are the filtered references, and the format
|
||||||
|
string is `%(refname):%(is-base:D)`, then the output would be
|
||||||
|
+
|
||||||
|
----
|
||||||
|
refs/heads/A:
|
||||||
|
refs/heads/B:(D)
|
||||||
|
refs/heads/C:
|
||||||
|
----
|
||||||
|
+
|
||||||
|
This is because the first-parent history of `D` has its earliest
|
||||||
|
intersection with the first-parent histories of the filtered refs at a
|
||||||
|
common first-parent ancestor of `B` and `C` and ties are broken by the
|
||||||
|
earliest ref in the sorted order.
|
||||||
|
+
|
||||||
|
Note that this token will not appear if the first-parent history of
|
||||||
|
_<commit-ish>_ does not intersect the first-parent histories of the
|
||||||
|
filtered refs.
|
||||||
|
|
||||||
|
`describe[:<option>,...]`::
|
||||||
|
A human-readable name, like linkgit:git-describe[1];
|
||||||
|
empty string for undescribable commits. The `describe` string may
|
||||||
|
be followed by a colon and one or more comma-separated options.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
`tags=<bool-value>`;;
|
||||||
|
Instead of only considering annotated tags, consider
|
||||||
|
lightweight tags as well; see the corresponding option in
|
||||||
|
linkgit:git-describe[1] for details.
|
||||||
|
`abbrev=<number>`;;
|
||||||
|
Use at least _<number>_ hexadecimal digits; see the corresponding
|
||||||
|
option in linkgit:git-describe[1] for details.
|
||||||
|
`match=<pattern>`;;
|
||||||
|
Only consider tags matching the `glob`(7) _<pattern>_,
|
||||||
|
excluding the `refs/tags/` prefix; see the corresponding option
|
||||||
|
in linkgit:git-describe[1] for details.
|
||||||
|
`exclude=<pattern>`;;
|
||||||
|
Do not consider tags matching the `glob`(7) _<pattern>_,
|
||||||
|
excluding the `refs/tags/` prefix; see the corresponding option
|
||||||
|
in linkgit:git-describe[1] for details.
|
||||||
|
--
|
||||||
|
|
||||||
|
In addition to the above, for commit and tag objects, the header
|
||||||
|
field names (`tree`, `parent`, `object`, `type`, and `tag`) can
|
||||||
|
be used to specify the value in the header field.
|
||||||
|
Fields `tree` and `parent` can also be used with modifier `:short` and
|
||||||
|
`:short=<length>` just like `objectname`.
|
||||||
|
|
||||||
|
For commit and tag objects, the special `creatordate` and `creator`
|
||||||
|
fields will correspond to the appropriate date or name-email-date tuple
|
||||||
|
from the `committer` or `tagger` fields depending on the object type.
|
||||||
|
These are intended for working on a mix of annotated and lightweight tags.
|
||||||
|
|
||||||
|
For tag objects, a `fieldname` prefixed with an asterisk (`*`) expands to
|
||||||
|
the `fieldname` value of the peeled object, rather than that of the tag
|
||||||
|
object itself.
|
||||||
|
|
||||||
|
Fields that have name-email-date tuple as its value (`author`,
|
||||||
|
`committer`, and `tagger`) can be suffixed with `name`, `email`,
|
||||||
|
and `date` to extract the named component. For email fields (`authoremail`,
|
||||||
|
`committeremail` and `taggeremail`), `:trim` can be appended to get the email
|
||||||
|
without angle brackets, and `:localpart` to get the part before the `@` symbol
|
||||||
|
out of the trimmed email. In addition to these, the `:mailmap` option and the
|
||||||
|
corresponding `:mailmap,trim` and `:mailmap,localpart` can be used (order does
|
||||||
|
not matter) to get values of the name and email according to the .mailmap file
|
||||||
|
or according to the file set in the mailmap.file or mailmap.blob configuration
|
||||||
|
variable (see linkgit:gitmailmap[5]).
|
||||||
|
|
||||||
|
The raw data in an object is `raw`.
|
||||||
|
|
||||||
|
`raw:size`::
|
||||||
|
The raw data size of the object.
|
||||||
|
|
||||||
|
Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`,
|
||||||
|
because such language may not support arbitrary binary data in their string
|
||||||
|
variable type.
|
||||||
|
|
||||||
|
The message in a commit or a tag object is `contents`, from which
|
||||||
|
`contents:<part>` can be used to extract various parts out of:
|
||||||
|
|
||||||
|
`contents:size`::
|
||||||
|
The size in bytes of the commit or tag message.
|
||||||
|
|
||||||
|
`contents:subject`::
|
||||||
|
The first paragraph of the message, which typically is a
|
||||||
|
single line, is taken as the "subject" of the commit or the
|
||||||
|
tag message.
|
||||||
|
Instead of `contents:subject`, field `subject` can also be used to
|
||||||
|
obtain same results. `:sanitize` can be appended to `subject` for
|
||||||
|
subject line suitable for filename.
|
||||||
|
|
||||||
|
`contents:body`::
|
||||||
|
The remainder of the commit or the tag message that follows
|
||||||
|
the "subject".
|
||||||
|
|
||||||
|
`contents:signature`::
|
||||||
|
The optional GPG signature of the tag.
|
||||||
|
|
||||||
|
`contents:lines=<n>`::
|
||||||
|
The first _<n>_ lines of the message.
|
||||||
|
|
||||||
|
Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
|
||||||
|
are obtained as `trailers[:<option>,...]` (or by using the historical alias
|
||||||
|
`contents:trailers[:<option>,...]`). For valid _<option>_ values see `trailers`
|
||||||
|
section of linkgit:git-log[1].
|
||||||
|
|
||||||
|
For sorting purposes, fields with numeric values sort in numeric order
|
||||||
|
(`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
|
||||||
|
All other fields are used to sort in their byte-value order.
|
||||||
|
|
||||||
|
There is also an option to sort by versions, this can be done by using
|
||||||
|
the fieldname `version:refname` or its alias `v:refname`.
|
||||||
|
|
||||||
|
In any case, a field name that refers to a field inapplicable to
|
||||||
|
the object referred by the ref does not cause an error. It
|
||||||
|
returns an empty string instead.
|
||||||
|
|
||||||
|
As a special case for the date-type fields, you may specify a format for the
|
||||||
|
date by adding `:` followed by date format name (see the values the `--date`
|
||||||
|
option to linkgit:git-rev-list[1] takes). If this formatting is provided in
|
||||||
|
a `--sort` key, references will be sorted according to the byte-value of the
|
||||||
|
formatted string rather than the numeric value of the underlying timestamp.
|
||||||
|
|
||||||
|
Some atoms like `%(align)` and `%(if)` always require a matching `%(end)`.
|
||||||
|
We call them "opening atoms" and sometimes denote them as `%($open)`.
|
||||||
|
|
||||||
|
When a scripting language specific quoting is in effect, everything
|
||||||
|
between a top-level opening atom and its matching %(end) is evaluated
|
||||||
|
according to the semantics of the opening atom and only its result
|
||||||
|
from the top-level is quoted.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
An example directly producing formatted text. Show the most recent
|
||||||
|
3 tagged commits:
|
||||||
|
|
||||||
|
------------
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
git for-each-ref --count=3 --sort='-*authordate' \
|
||||||
|
`--format='From: %(*authorname) %(*authoremail)
|
||||||
|
Subject: %(*subject)
|
||||||
|
Date: %(*authordate)
|
||||||
|
Ref: %(*refname)
|
||||||
|
|
||||||
|
%(*body)
|
||||||
|
' 'refs/tags'
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
A simple example showing the use of shell eval on the output,
|
||||||
|
demonstrating the use of `--shell`. List the prefixes of all heads:
|
||||||
|
|
||||||
|
------------
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
git for-each-ref --shell --format="ref=%(refname)" refs/heads | \
|
||||||
|
while read entry
|
||||||
|
do
|
||||||
|
eval "$entry"
|
||||||
|
echo `dirname $ref`
|
||||||
|
done
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
A bit more elaborate report on tags, demonstrating that the format
|
||||||
|
may be an entire script:
|
||||||
|
|
||||||
|
------------
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
fmt='
|
||||||
|
r=%(refname)
|
||||||
|
t=%(*objecttype)
|
||||||
|
T=${r#refs/tags/}
|
||||||
|
|
||||||
|
o=%(*objectname)
|
||||||
|
n=%(*authorname)
|
||||||
|
e=%(*authoremail)
|
||||||
|
s=%(*subject)
|
||||||
|
d=%(*authordate)
|
||||||
|
b=%(*body)
|
||||||
|
|
||||||
|
kind=Tag
|
||||||
|
if test "z$t" = z
|
||||||
|
then
|
||||||
|
# could be a lightweight tag
|
||||||
|
t=%(objecttype)
|
||||||
|
kind="Lightweight tag"
|
||||||
|
o=%(objectname)
|
||||||
|
n=%(authorname)
|
||||||
|
e=%(authoremail)
|
||||||
|
s=%(subject)
|
||||||
|
d=%(authordate)
|
||||||
|
b=%(body)
|
||||||
|
fi
|
||||||
|
echo "$kind $T points at a $t object $o"
|
||||||
|
if test "z$t" = zcommit
|
||||||
|
then
|
||||||
|
echo "The commit was authored by $n $e
|
||||||
|
at $d, and titled
|
||||||
|
|
||||||
|
$s
|
||||||
|
|
||||||
|
Its message reads as:
|
||||||
|
"
|
||||||
|
echo "$b" | sed -e "s/^/ /"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
'
|
||||||
|
|
||||||
|
eval=`git for-each-ref --shell --format="$fmt" \
|
||||||
|
--sort='*objecttype' \
|
||||||
|
--sort=-taggerdate \
|
||||||
|
refs/tags`
|
||||||
|
eval "$eval"
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
An example to show the usage of `%(if)...%(then)...%(else)...%(end)`.
|
||||||
|
This prefixes the current branch with a star.
|
||||||
|
|
||||||
|
------------
|
||||||
|
git for-each-ref --format="%(if)%(HEAD)%(then)* %(else) %(end)%(refname:short)" refs/heads/
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
An example to show the usage of `%(if)...%(then)...%(end)`.
|
||||||
|
This prints the authorname, if present.
|
||||||
|
|
||||||
|
------------
|
||||||
|
git for-each-ref --format="%(refname)%(if)%(authorname)%(then) Authored by: %(authorname)%(end)"
|
||||||
|
------------
|
||||||
|
|
||||||
|
CAVEATS
|
||||||
|
-------
|
||||||
|
|
||||||
|
Note that the sizes of objects on disk are reported accurately, but care
|
||||||
|
should be taken in drawing conclusions about which refs or objects are
|
||||||
|
responsible for disk usage. The size of a packed non-delta object may be
|
||||||
|
much larger than the size of objects which delta against it, but the
|
||||||
|
choice of which object is the base and which is the delta is arbitrary
|
||||||
|
and is subject to change during a repack.
|
||||||
|
|
||||||
|
Note also that multiple copies of an object may be present in the object
|
||||||
|
database; in this case, it is undefined which copy's size or delta base
|
||||||
|
will be reported.
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
-----
|
||||||
|
|
||||||
|
include::ref-reachability-filters.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-show-ref[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
68
app/src/main/assets/manpages/git-for-each-repo.txt
Normal file
68
app/src/main/assets/manpages/git-for-each-repo.txt
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
git-for-each-repo(1)
|
||||||
|
====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-for-each-repo - Run a Git command on a list of repositories
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git for-each-repo' --config=<config> [--] <arguments>
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Run a Git command on a list of repositories. The arguments after the
|
||||||
|
known options or `--` indicator are used as the arguments for the Git
|
||||||
|
subprocess.
|
||||||
|
|
||||||
|
THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
|
||||||
|
|
||||||
|
For example, we could run maintenance on each of a list of repositories
|
||||||
|
stored in a `maintenance.repo` config variable using
|
||||||
|
|
||||||
|
-------------
|
||||||
|
git for-each-repo --config=maintenance.repo maintenance run
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This will run `git -C <repo> maintenance run` for each value `<repo>`
|
||||||
|
in the multi-valued config variable `maintenance.repo`.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--config=<config>::
|
||||||
|
Use the given config variable as a multi-valued list storing
|
||||||
|
absolute path names. Iterate on that list of paths to run
|
||||||
|
the given arguments.
|
||||||
|
+
|
||||||
|
These config values are loaded from system, global, and local Git config,
|
||||||
|
as available. If `git for-each-repo` is run in a directory that is not a
|
||||||
|
Git repository, then only the system and global config is used.
|
||||||
|
|
||||||
|
--keep-going::
|
||||||
|
Continue with the remaining repositories if the command failed
|
||||||
|
on a repository. The exit code will still indicate that the
|
||||||
|
overall operation was not successful.
|
||||||
|
+
|
||||||
|
Note that the exact exit code of the failing command is not passed
|
||||||
|
through as the exit code of the `for-each-repo` command: If the command
|
||||||
|
failed in any of the specified repositories, the overall exit code will
|
||||||
|
be 1.
|
||||||
|
|
||||||
|
SUBPROCESS BEHAVIOR
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
If any `git -C <repo> <arguments>` subprocess returns a non-zero exit code,
|
||||||
|
then the `git for-each-repo` process returns that exit code without running
|
||||||
|
more subprocesses.
|
||||||
|
|
||||||
|
Each `git -C <repo> <arguments>` subprocess inherits the standard file
|
||||||
|
descriptors `stdin`, `stdout`, and `stderr`.
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
826
app/src/main/assets/manpages/git-format-patch.txt
Normal file
826
app/src/main/assets/manpages/git-format-patch.txt
Normal file
@@ -0,0 +1,826 @@
|
|||||||
|
git-format-patch(1)
|
||||||
|
===================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-format-patch - Prepare patches for e-mail submission
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git format-patch' [-k] [(-o|--output-directory) <dir> | --stdout]
|
||||||
|
[--no-thread | --thread[=<style>]]
|
||||||
|
[(--attach|--inline)[=<boundary>] | --no-attach]
|
||||||
|
[-s | --signoff]
|
||||||
|
[--signature=<signature> | --no-signature]
|
||||||
|
[--signature-file=<file>]
|
||||||
|
[-n | --numbered | -N | --no-numbered]
|
||||||
|
[--start-number <n>] [--numbered-files]
|
||||||
|
[--in-reply-to=<message-id>] [--suffix=.<sfx>]
|
||||||
|
[--ignore-if-in-upstream] [--always]
|
||||||
|
[--cover-from-description=<mode>]
|
||||||
|
[--rfc[=<rfc>]] [--subject-prefix=<subject-prefix>]
|
||||||
|
[(--reroll-count|-v) <n>]
|
||||||
|
[--to=<email>] [--cc=<email>]
|
||||||
|
[--[no-]cover-letter] [--quiet]
|
||||||
|
[--commit-list-format=<format-spec>]
|
||||||
|
[--[no-]encode-email-headers]
|
||||||
|
[--no-notes | --notes[=<ref>]]
|
||||||
|
[--interdiff=<previous>]
|
||||||
|
[--range-diff=<previous> [--creation-factor=<percent>]]
|
||||||
|
[--filename-max-length=<n>]
|
||||||
|
[--progress]
|
||||||
|
[<common-diff-options>]
|
||||||
|
[ <since> | <revision-range> ]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Prepare each non-merge commit with its "patch" in
|
||||||
|
one "message" per commit, formatted to resemble a UNIX mailbox.
|
||||||
|
The output of this command is convenient for e-mail submission or
|
||||||
|
for use with 'git am'.
|
||||||
|
|
||||||
|
A "message" generated by the command consists of three parts:
|
||||||
|
|
||||||
|
* A brief metadata header that begins with `From <commit>`
|
||||||
|
with a fixed `Mon Sep 17 00:00:00 2001` datestamp to help programs
|
||||||
|
like "file(1)" to recognize that the file is an output from this
|
||||||
|
command, fields that record the author identity, the author date,
|
||||||
|
and the title of the change (taken from the first paragraph of the
|
||||||
|
commit log message).
|
||||||
|
|
||||||
|
* The second and subsequent paragraphs of the commit log message.
|
||||||
|
|
||||||
|
* The "patch", which is the "diff -p --stat" output (see
|
||||||
|
linkgit:git-diff[1]) between the commit and its parent.
|
||||||
|
|
||||||
|
The log message and the patch are separated by a line with a
|
||||||
|
three-dash line.
|
||||||
|
|
||||||
|
There are two ways to specify which commits to operate on.
|
||||||
|
|
||||||
|
1. A single commit, <since>, specifies that the commits leading
|
||||||
|
to the tip of the current branch that are not in the history
|
||||||
|
that leads to the <since> to be output.
|
||||||
|
|
||||||
|
2. Generic <revision-range> expression (see "SPECIFYING
|
||||||
|
REVISIONS" section in linkgit:gitrevisions[7]) means the
|
||||||
|
commits in the specified range.
|
||||||
|
|
||||||
|
The first rule takes precedence in the case of a single <commit>. To
|
||||||
|
apply the second rule, i.e., format everything since the beginning of
|
||||||
|
history up until <commit>, use the `--root` option: `git format-patch
|
||||||
|
--root <commit>`. If you want to format only <commit> itself, you
|
||||||
|
can do this with `git format-patch -1 <commit>`.
|
||||||
|
|
||||||
|
By default, each output file is numbered sequentially from 1, and uses the
|
||||||
|
first line of the commit message (massaged for pathname safety) as
|
||||||
|
the filename. With the `--numbered-files` option, the output file names
|
||||||
|
will only be numbers, without the first line of the commit appended.
|
||||||
|
The names of the output files are printed to standard
|
||||||
|
output, unless the `--stdout` option is specified.
|
||||||
|
|
||||||
|
If `-o` is specified, output files are created in <dir>. Otherwise
|
||||||
|
they are created in the current working directory. The default path
|
||||||
|
can be set with the `format.outputDirectory` configuration option.
|
||||||
|
The `-o` option takes precedence over `format.outputDirectory`.
|
||||||
|
To store patches in the current working directory even when
|
||||||
|
`format.outputDirectory` points elsewhere, use `-o .`. All directory
|
||||||
|
components will be created.
|
||||||
|
|
||||||
|
By default, the subject of a single patch is "[PATCH] " followed by
|
||||||
|
the concatenation of lines from the commit message up to the first blank
|
||||||
|
line (see the DISCUSSION section of linkgit:git-commit[1]).
|
||||||
|
|
||||||
|
When multiple patches are output, the subject prefix will instead be
|
||||||
|
"[PATCH n/m] ". To force 1/1 to be added for a single patch, use `-n`.
|
||||||
|
To omit patch numbers from the subject, use `-N`.
|
||||||
|
|
||||||
|
If given `--thread`, `git-format-patch` will generate `In-Reply-To` and
|
||||||
|
`References` headers to make the second and subsequent patch mails appear
|
||||||
|
as replies to the first mail; this also generates a `Message-ID` header to
|
||||||
|
reference.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
:git-format-patch: 1
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
-<n>::
|
||||||
|
Prepare patches from the topmost <n> commits.
|
||||||
|
|
||||||
|
-o <dir>::
|
||||||
|
--output-directory <dir>::
|
||||||
|
Use <dir> to store the resulting files, instead of the
|
||||||
|
current working directory.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
--numbered::
|
||||||
|
Name output in '[PATCH n/m]' format, even with a single patch.
|
||||||
|
|
||||||
|
-N::
|
||||||
|
--no-numbered::
|
||||||
|
Name output in '[PATCH]' format.
|
||||||
|
|
||||||
|
--start-number <n>::
|
||||||
|
Start numbering the patches at <n> instead of 1.
|
||||||
|
|
||||||
|
--numbered-files::
|
||||||
|
Output file names will be a simple number sequence
|
||||||
|
without the default first line of the commit appended.
|
||||||
|
|
||||||
|
-k::
|
||||||
|
--keep-subject::
|
||||||
|
Do not strip/add '[PATCH]' from the first line of the
|
||||||
|
commit log message.
|
||||||
|
|
||||||
|
-s::
|
||||||
|
--signoff::
|
||||||
|
Add a `Signed-off-by` trailer to the commit message, using
|
||||||
|
the committer identity of yourself.
|
||||||
|
See the signoff option in linkgit:git-commit[1] for more information.
|
||||||
|
|
||||||
|
--stdout::
|
||||||
|
Print all commits to the standard output in mbox format,
|
||||||
|
instead of creating a file for each one.
|
||||||
|
|
||||||
|
--attach[=<boundary>]::
|
||||||
|
Create multipart/mixed attachment, the first part of
|
||||||
|
which is the commit message and the patch itself in the
|
||||||
|
second part, with `Content-Disposition: attachment`.
|
||||||
|
|
||||||
|
--no-attach::
|
||||||
|
Disable the creation of an attachment, overriding the
|
||||||
|
configuration setting.
|
||||||
|
|
||||||
|
--inline[=<boundary>]::
|
||||||
|
Create multipart/mixed attachment, the first part of
|
||||||
|
which is the commit message and the patch itself in the
|
||||||
|
second part, with `Content-Disposition: inline`.
|
||||||
|
|
||||||
|
--thread[=<style>]::
|
||||||
|
--no-thread::
|
||||||
|
Controls addition of `In-Reply-To` and `References` headers to
|
||||||
|
make the second and subsequent mails appear as replies to the
|
||||||
|
first. Also controls generation of the `Message-ID` header to
|
||||||
|
reference.
|
||||||
|
+
|
||||||
|
The optional <style> argument can be either `shallow` or `deep`.
|
||||||
|
'shallow' threading makes every mail a reply to the head of the
|
||||||
|
series, where the head is chosen from the cover letter, the
|
||||||
|
`--in-reply-to`, and the first patch mail, in this order. 'deep'
|
||||||
|
threading makes every mail a reply to the previous one.
|
||||||
|
+
|
||||||
|
The default is `--no-thread`, unless the `format.thread` configuration
|
||||||
|
is set. `--thread` without an argument is equivalent to `--thread=shallow`.
|
||||||
|
+
|
||||||
|
Beware that the default for 'git send-email' is to thread emails
|
||||||
|
itself. If you want `git format-patch` to take care of threading, you
|
||||||
|
will want to ensure that threading is disabled for `git send-email`.
|
||||||
|
|
||||||
|
--in-reply-to=<message-id>::
|
||||||
|
Make the first mail (or all the mails with `--no-thread`) appear as a
|
||||||
|
reply to the given <message-id>, which avoids breaking threads to
|
||||||
|
provide a new patch series.
|
||||||
|
|
||||||
|
--ignore-if-in-upstream::
|
||||||
|
Do not include a patch that matches a commit in
|
||||||
|
<until>..<since>. This will examine all patches reachable
|
||||||
|
from <since> but not from <until> and compare them with the
|
||||||
|
patches being generated, and any patch that matches is
|
||||||
|
ignored.
|
||||||
|
|
||||||
|
--always::
|
||||||
|
Include patches for commits that do not introduce any change,
|
||||||
|
which are omitted by default.
|
||||||
|
|
||||||
|
--cover-from-description=<mode>::
|
||||||
|
Controls which parts of the cover letter will be automatically
|
||||||
|
populated using the branch's description.
|
||||||
|
+
|
||||||
|
If `<mode>` is `message` or `default`, the cover letter subject will be
|
||||||
|
populated with placeholder text. The body of the cover letter will be
|
||||||
|
populated with the branch's description. This is the default mode when
|
||||||
|
no configuration nor command line option is specified.
|
||||||
|
+
|
||||||
|
If `<mode>` is `subject`, the first paragraph of the branch description will
|
||||||
|
populate the cover letter subject. The remainder of the description will
|
||||||
|
populate the body of the cover letter.
|
||||||
|
+
|
||||||
|
If `<mode>` is `auto`, if the first paragraph of the branch description
|
||||||
|
is greater than 100 bytes, then the mode will be `message`, otherwise
|
||||||
|
`subject` will be used.
|
||||||
|
+
|
||||||
|
If `<mode>` is `none`, both the cover letter subject and body will be
|
||||||
|
populated with placeholder text.
|
||||||
|
|
||||||
|
--description-file=<file>::
|
||||||
|
Use the contents of <file> instead of the branch's description
|
||||||
|
for generating the cover letter.
|
||||||
|
|
||||||
|
--subject-prefix=<subject-prefix>::
|
||||||
|
Instead of the standard '[PATCH]' prefix in the subject
|
||||||
|
line, instead use '[<subject-prefix>]'. This can be used
|
||||||
|
to name a patch series, and can be combined with the
|
||||||
|
`--numbered` option.
|
||||||
|
+
|
||||||
|
The configuration variable `format.subjectPrefix` may also be used
|
||||||
|
to configure a subject prefix to apply to a given repository for
|
||||||
|
all patches. This is often useful on mailing lists which receive
|
||||||
|
patches for several repositories and can be used to disambiguate
|
||||||
|
the patches (with a value of e.g. "PATCH my-project").
|
||||||
|
|
||||||
|
--filename-max-length=<n>::
|
||||||
|
Instead of the standard 64 bytes, chomp the generated output
|
||||||
|
filenames at around '<n>' bytes (too short a value will be
|
||||||
|
silently raised to a reasonable length). Defaults to the
|
||||||
|
value of the `format.filenameMaxLength` configuration
|
||||||
|
variable, or 64 if unconfigured.
|
||||||
|
|
||||||
|
--rfc[=<rfc>]::
|
||||||
|
Prepends the string _<rfc>_ (defaults to "RFC") to
|
||||||
|
the subject prefix. As the subject prefix defaults to
|
||||||
|
"PATCH", you'll get "RFC PATCH" by default.
|
||||||
|
+
|
||||||
|
RFC means "Request For Comments"; use this when sending
|
||||||
|
an experimental patch for discussion rather than application.
|
||||||
|
"--rfc=WIP" may also be a useful way to indicate that a patch
|
||||||
|
is not complete yet ("WIP" stands for "Work In Progress").
|
||||||
|
+
|
||||||
|
If the convention of the receiving community for a particular extra
|
||||||
|
string is to have it _after_ the subject prefix, the string _<rfc>_
|
||||||
|
can be prefixed with a dash ("`-`") to signal that the rest of
|
||||||
|
the _<rfc>_ string should be appended to the subject prefix instead,
|
||||||
|
e.g., `--rfc='-(WIP)'` results in "PATCH (WIP)".
|
||||||
|
|
||||||
|
-v <n>::
|
||||||
|
--reroll-count=<n>::
|
||||||
|
Mark the series as the <n>-th iteration of the topic. The
|
||||||
|
output filenames have `v<n>` prepended to them, and the
|
||||||
|
subject prefix ("PATCH" by default, but configurable via the
|
||||||
|
`--subject-prefix` option) has ` v<n>` appended to it. E.g.
|
||||||
|
`--reroll-count=4` may produce `v4-0001-add-makefile.patch`
|
||||||
|
file that has "Subject: [PATCH v4 1/20] Add makefile" in it.
|
||||||
|
`<n>` does not have to be an integer (e.g. "--reroll-count=4.4",
|
||||||
|
or "--reroll-count=4rev2" are allowed), but the downside of
|
||||||
|
using such a reroll-count is that the range-diff/interdiff
|
||||||
|
with the previous version does not state exactly which
|
||||||
|
version the new iteration is compared against.
|
||||||
|
|
||||||
|
--to=<email>::
|
||||||
|
Add a `To:` header to the email headers. This is in addition
|
||||||
|
to any configured headers, and may be used multiple times.
|
||||||
|
The negated form `--no-to` discards all `To:` headers added so
|
||||||
|
far (from config or command line).
|
||||||
|
|
||||||
|
--cc=<email>::
|
||||||
|
Add a `Cc:` header to the email headers. This is in addition
|
||||||
|
to any configured headers, and may be used multiple times.
|
||||||
|
The negated form `--no-cc` discards all `Cc:` headers added so
|
||||||
|
far (from config or command line).
|
||||||
|
|
||||||
|
--from::
|
||||||
|
--from=<ident>::
|
||||||
|
Use `ident` in the `From:` header of each email. In case of a
|
||||||
|
commit email, if the author ident of the commit is not textually
|
||||||
|
identical to the provided `ident`, place a `From:` header in the
|
||||||
|
body of the message with the original author. If no `ident` is
|
||||||
|
given, or if the option is not passed at all, use the ident of
|
||||||
|
the current committer.
|
||||||
|
+
|
||||||
|
Note that this option is only useful if you are actually sending the
|
||||||
|
emails and want to identify yourself as the sender, but retain the
|
||||||
|
original author (and `git am` will correctly pick up the in-body
|
||||||
|
header). Note also that `git send-email` already handles this
|
||||||
|
transformation for you, and this option should not be used if you are
|
||||||
|
feeding the result to `git send-email`.
|
||||||
|
|
||||||
|
--force-in-body-from::
|
||||||
|
--no-force-in-body-from::
|
||||||
|
With the e-mail sender specified via the `--from` option, by
|
||||||
|
default, an in-body "From:" to identify the real author of
|
||||||
|
the commit is added at the top of the commit log message if
|
||||||
|
the sender is different from the author. With this option,
|
||||||
|
the in-body "From:" is added even when the sender and the
|
||||||
|
author have the same name and address, which may help if the
|
||||||
|
mailing list software mangles the sender's identity.
|
||||||
|
Defaults to the value of the `format.forceInBodyFrom`
|
||||||
|
configuration variable.
|
||||||
|
|
||||||
|
--add-header=<header>::
|
||||||
|
Add an arbitrary header to the email headers. This is in addition
|
||||||
|
to any configured headers, and may be used multiple times.
|
||||||
|
For example, `--add-header="Organization: git-foo"`.
|
||||||
|
The negated form `--no-add-header` discards *all* (`To:`,
|
||||||
|
`Cc:`, and custom) headers added so far from config or command
|
||||||
|
line.
|
||||||
|
|
||||||
|
--cover-letter::
|
||||||
|
--no-cover-letter::
|
||||||
|
In addition to the patches, generate a cover letter file containing the
|
||||||
|
branch description, commit list and the overall diffstat. You can fill
|
||||||
|
in a description in the file before sending it out.
|
||||||
|
|
||||||
|
--commit-list-format=<format-spec>::
|
||||||
|
Specify the format in which to generate the commit list of the patch
|
||||||
|
series. The accepted values for format-spec are `shortlog`, `modern` or
|
||||||
|
a format-string prefixed with `log:`. E.g. `log: %s (%an)`.
|
||||||
|
`modern` is the same as `log:%w(72)[%(count)/%(total)] %s`.
|
||||||
|
The `log:` prefix can be omitted if the format-string has a `%` in it
|
||||||
|
(expecting that it is part of `%<placeholder>`).
|
||||||
|
Defaults to the `format.commitListFormat` configuration variable, if
|
||||||
|
set, or `shortlog`.
|
||||||
|
This option given from the command-line implies the use of
|
||||||
|
`--cover-letter` unless `--no-cover-letter` is given.
|
||||||
|
|
||||||
|
--encode-email-headers::
|
||||||
|
--no-encode-email-headers::
|
||||||
|
Encode email headers that have non-ASCII characters with
|
||||||
|
"Q-encoding" (described in RFC 2047), instead of outputting the
|
||||||
|
headers verbatim. Defaults to the value of the
|
||||||
|
`format.encodeEmailHeaders` configuration variable.
|
||||||
|
|
||||||
|
--interdiff=<previous>::
|
||||||
|
As a reviewer aid, insert an interdiff into the cover letter,
|
||||||
|
or as commentary of the lone patch of a 1-patch series, showing
|
||||||
|
the differences between the previous version of the patch series and
|
||||||
|
the series currently being formatted. `previous` is a single revision
|
||||||
|
naming the tip of the previous series which shares a common base with
|
||||||
|
the series being formatted (for example `git format-patch
|
||||||
|
--cover-letter --interdiff=feature/v1 -3 feature/v2`).
|
||||||
|
|
||||||
|
--range-diff=<previous>::
|
||||||
|
As a reviewer aid, insert a range-diff (see linkgit:git-range-diff[1])
|
||||||
|
into the cover letter, or as commentary of the lone patch of a
|
||||||
|
1-patch series, showing the differences between the previous
|
||||||
|
version of the patch series and the series currently being formatted.
|
||||||
|
`previous` can be a single revision naming the tip of the previous
|
||||||
|
series if it shares a common base with the series being formatted (for
|
||||||
|
example `git format-patch --cover-letter --range-diff=feature/v1 -3
|
||||||
|
feature/v2`), or a revision range if the two versions of the series are
|
||||||
|
disjoint (for example `git format-patch --cover-letter
|
||||||
|
--range-diff=feature/v1~3..feature/v1 -3 feature/v2`).
|
||||||
|
+
|
||||||
|
Note that diff options passed to the command affect how the primary
|
||||||
|
product of `format-patch` is generated, and they are not passed to
|
||||||
|
the underlying `range-diff` machinery used to generate the cover-letter
|
||||||
|
material (this may change in the future).
|
||||||
|
|
||||||
|
--creation-factor=<percent>::
|
||||||
|
Used with `--range-diff`, tweak the heuristic which matches up commits
|
||||||
|
between the previous and current series of patches by adjusting the
|
||||||
|
creation/deletion cost fudge factor. See linkgit:git-range-diff[1])
|
||||||
|
for details.
|
||||||
|
+
|
||||||
|
Defaults to 999 (the linkgit:git-range-diff[1] uses 60), as the use
|
||||||
|
case is to show comparison with an older iteration of the same
|
||||||
|
topic and the tool should find more correspondence between the two
|
||||||
|
sets of patches.
|
||||||
|
|
||||||
|
--notes[=<ref>]::
|
||||||
|
--no-notes::
|
||||||
|
Append the notes (see linkgit:git-notes[1]) for the commit
|
||||||
|
after the three-dash line.
|
||||||
|
+
|
||||||
|
The expected use case of this is to write supporting explanation for
|
||||||
|
the commit that does not belong to the commit log message proper,
|
||||||
|
and include it with the patch submission. While one can simply write
|
||||||
|
these explanations after `format-patch` has run but before sending,
|
||||||
|
keeping them as Git notes allows them to be maintained between versions
|
||||||
|
of the patch series (but see the discussion of the `notes.rewrite`
|
||||||
|
configuration options in linkgit:git-notes[1] to use this workflow).
|
||||||
|
+
|
||||||
|
The default is `--no-notes`, unless the `format.notes` configuration is
|
||||||
|
set.
|
||||||
|
|
||||||
|
--signature=<signature>::
|
||||||
|
--no-signature::
|
||||||
|
Add a signature to each message produced. Per RFC 3676 the signature
|
||||||
|
is separated from the body by a line with '-- ' on it. If the
|
||||||
|
signature option is omitted the signature defaults to the Git version
|
||||||
|
number.
|
||||||
|
|
||||||
|
--signature-file=<file>::
|
||||||
|
Works just like --signature except the signature is read from a file.
|
||||||
|
|
||||||
|
--suffix=.<sfx>::
|
||||||
|
Instead of using `.patch` as the suffix for generated
|
||||||
|
filenames, use specified suffix. A common alternative is
|
||||||
|
`--suffix=.txt`. Leaving this empty will remove the `.patch`
|
||||||
|
suffix.
|
||||||
|
+
|
||||||
|
Note that the leading character does not have to be a dot; for example,
|
||||||
|
you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Do not print the names of the generated files to standard output.
|
||||||
|
|
||||||
|
--no-binary::
|
||||||
|
Do not output contents of changes in binary files, instead
|
||||||
|
display a notice that those files changed. Patches generated
|
||||||
|
using this option cannot be applied properly, but they are
|
||||||
|
still useful for code review.
|
||||||
|
|
||||||
|
--zero-commit::
|
||||||
|
Output an all-zero hash in each patch's From header instead
|
||||||
|
of the hash of the commit.
|
||||||
|
|
||||||
|
--no-base::
|
||||||
|
--base[=<commit>]::
|
||||||
|
Record the base tree information to identify the state the
|
||||||
|
patch series applies to. See the BASE TREE INFORMATION section
|
||||||
|
below for details. If <commit> is "auto", a base commit is
|
||||||
|
automatically chosen. The `--no-base` option overrides a
|
||||||
|
`format.useAutoBase` configuration.
|
||||||
|
|
||||||
|
--root::
|
||||||
|
Treat the revision argument as a <revision-range>, even if it
|
||||||
|
is just a single commit (that would normally be treated as a
|
||||||
|
<since>). Note that root commits included in the specified
|
||||||
|
range are always formatted as creation patches, independently
|
||||||
|
of this flag.
|
||||||
|
|
||||||
|
--progress::
|
||||||
|
Show progress reports on stderr as patches are generated.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
You can specify extra mail header lines to be added to each message,
|
||||||
|
defaults for the subject prefix and file suffix, number patches when
|
||||||
|
outputting more than one patch, add "To:" or "Cc:" headers, configure
|
||||||
|
attachments, change the patch output directory, and sign off patches
|
||||||
|
with configuration variables.
|
||||||
|
|
||||||
|
------------
|
||||||
|
[format]
|
||||||
|
headers = "Organization: git-foo\n"
|
||||||
|
subjectPrefix = CHANGE
|
||||||
|
suffix = .txt
|
||||||
|
numbered = auto
|
||||||
|
to = <email>
|
||||||
|
cc = <email>
|
||||||
|
attach [ = mime-boundary-string ]
|
||||||
|
signOff = true
|
||||||
|
outputDirectory = <directory>
|
||||||
|
coverLetter = auto
|
||||||
|
commitListFormat = shortlog
|
||||||
|
coverFromDescription = auto
|
||||||
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
The patch produced by 'git format-patch' is in UNIX mailbox format,
|
||||||
|
with a fixed "magic" time stamp to indicate that the file is output
|
||||||
|
from format-patch rather than a real mailbox, like so:
|
||||||
|
|
||||||
|
------------
|
||||||
|
From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tony Luck <tony.luck@intel.com>
|
||||||
|
Date: Tue, 13 Jul 2010 11:42:54 -0700
|
||||||
|
Subject: [PATCH] =?UTF-8?q?[IA64]=20Put=20ia64=20config=20files=20on=20the=20?=
|
||||||
|
=?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?=
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
arch/arm config files were slimmed down using a python script
|
||||||
|
(See commit c2330e286f68f1c408b4aa6515ba49d57f05beae comment)
|
||||||
|
|
||||||
|
Do the same for ia64 so we can have sleek & trim looking
|
||||||
|
...
|
||||||
|
------------
|
||||||
|
|
||||||
|
Typically it will be placed in a MUA's drafts folder, edited to add
|
||||||
|
timely commentary that should not go in the changelog after the three
|
||||||
|
dashes, and then sent as a message whose body, in our example, starts
|
||||||
|
with "arch/arm config files were...". On the receiving end, readers
|
||||||
|
can save interesting patches in a UNIX mailbox and apply them with
|
||||||
|
linkgit:git-am[1].
|
||||||
|
|
||||||
|
When a patch is part of an ongoing discussion, the patch generated by
|
||||||
|
'git format-patch' can be tweaked to take advantage of the 'git am
|
||||||
|
--scissors' feature. After your response to the discussion comes a
|
||||||
|
line that consists solely of "`-- >8 --`" (scissors and perforation),
|
||||||
|
followed by the patch with unnecessary header fields removed:
|
||||||
|
|
||||||
|
------------
|
||||||
|
...
|
||||||
|
> So we should do such-and-such.
|
||||||
|
|
||||||
|
Makes sense to me. How about this patch?
|
||||||
|
|
||||||
|
-- >8 --
|
||||||
|
Subject: [IA64] Put ia64 config files on the Uwe Kleine-König diet
|
||||||
|
|
||||||
|
arch/arm config files were slimmed down using a python script
|
||||||
|
...
|
||||||
|
------------
|
||||||
|
|
||||||
|
When sending a patch this way, most often you are sending your own
|
||||||
|
patch, so in addition to the "`From $SHA1 $magic_timestamp`" marker you
|
||||||
|
should omit `From:` and `Date:` lines from the patch file. The patch
|
||||||
|
title is likely to be different from the subject of the discussion the
|
||||||
|
patch is in response to, so it is likely that you would want to keep
|
||||||
|
the Subject: line, like the example above.
|
||||||
|
|
||||||
|
Checking for patch corruption
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Many mailers if not set up properly will corrupt whitespace. Here are
|
||||||
|
two common types of corruption:
|
||||||
|
|
||||||
|
* Empty context lines that do not have _any_ whitespace.
|
||||||
|
|
||||||
|
* Non-empty context lines that have one extra whitespace at the
|
||||||
|
beginning.
|
||||||
|
|
||||||
|
One way to test if your MUA is set up correctly is:
|
||||||
|
|
||||||
|
* Send the patch to yourself, exactly the way you would, except
|
||||||
|
with To: and Cc: lines that do not contain the list and
|
||||||
|
maintainer address.
|
||||||
|
|
||||||
|
* Save that patch to a file in UNIX mailbox format. Call it a.patch,
|
||||||
|
say.
|
||||||
|
|
||||||
|
* Apply it:
|
||||||
|
|
||||||
|
$ git fetch <project> master:test-apply
|
||||||
|
$ git switch test-apply
|
||||||
|
$ git restore --source=HEAD --staged --worktree :/
|
||||||
|
$ git am a.patch
|
||||||
|
|
||||||
|
If it does not apply correctly, there can be various reasons.
|
||||||
|
|
||||||
|
* The patch itself does not apply cleanly. That is _bad_ but
|
||||||
|
does not have much to do with your MUA. You might want to rebase
|
||||||
|
the patch with linkgit:git-rebase[1] before regenerating it in
|
||||||
|
this case.
|
||||||
|
|
||||||
|
* The MUA corrupted your patch; "am" would complain that
|
||||||
|
the patch does not apply. Look in the .git/rebase-apply/ subdirectory and
|
||||||
|
see what 'patch' file contains and check for the common
|
||||||
|
corruption patterns mentioned above.
|
||||||
|
|
||||||
|
* While at it, check the 'info' and 'final-commit' files as well.
|
||||||
|
If what is in 'final-commit' is not exactly what you would want to
|
||||||
|
see in the commit log message, it is very likely that the
|
||||||
|
receiver would end up hand editing the log message when applying
|
||||||
|
your patch. Things like "Hi, this is my first patch.\n" in the
|
||||||
|
patch e-mail should come after the three-dash line that signals
|
||||||
|
the end of the commit message.
|
||||||
|
|
||||||
|
MUA-SPECIFIC HINTS
|
||||||
|
------------------
|
||||||
|
Here are some hints on how to successfully submit patches inline using
|
||||||
|
various mailers.
|
||||||
|
|
||||||
|
GMail
|
||||||
|
~~~~~
|
||||||
|
GMail does not have any way to turn off line wrapping in the web
|
||||||
|
interface, so it will mangle any emails that you send. You can however
|
||||||
|
use "git send-email" and send your patches through the GMail SMTP server, or
|
||||||
|
use any IMAP email client to connect to the google IMAP server and forward
|
||||||
|
the emails through that.
|
||||||
|
|
||||||
|
For hints on using 'git send-email' to send your patches through the
|
||||||
|
GMail SMTP server, see the EXAMPLE section of linkgit:git-send-email[1].
|
||||||
|
|
||||||
|
For hints on submission using the IMAP interface, see the EXAMPLE
|
||||||
|
section of linkgit:git-imap-send[1].
|
||||||
|
|
||||||
|
Thunderbird
|
||||||
|
~~~~~~~~~~~
|
||||||
|
By default, Thunderbird will both wrap emails as well as flag
|
||||||
|
them as being 'format=flowed', both of which will make the
|
||||||
|
resulting email unusable by Git.
|
||||||
|
|
||||||
|
There are three different approaches: use an add-on to turn off line wraps,
|
||||||
|
configure Thunderbird to not mangle patches, or use
|
||||||
|
an external editor to keep Thunderbird from mangling the patches.
|
||||||
|
|
||||||
|
Approach #1 (add-on)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Install the Toggle Line Wrap add-on that is available from
|
||||||
|
https://addons.thunderbird.net/thunderbird/addon/toggle-line-wrap
|
||||||
|
It adds a button "Line Wrap" to the composer's toolbar
|
||||||
|
that you can tick off. Now you can compose the message as you otherwise do
|
||||||
|
(cut + paste, 'git format-patch' | 'git imap-send', etc), but you have to
|
||||||
|
insert line breaks manually in any text that you type.
|
||||||
|
|
||||||
|
As a bonus feature, the add-on can detect patch text in the composer
|
||||||
|
and warns when line wrapping has not yet been turned off.
|
||||||
|
|
||||||
|
The add-on requires a few tweaks of the advanced configuration
|
||||||
|
(about:config). These are listed on the download page.
|
||||||
|
|
||||||
|
Approach #2 (configuration)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Three steps:
|
||||||
|
|
||||||
|
1. Configure your mail server composition as plain text:
|
||||||
|
Edit...Account Settings...Composition & Addressing,
|
||||||
|
uncheck "Compose Messages in HTML".
|
||||||
|
|
||||||
|
2. Configure your general composition window to not wrap.
|
||||||
|
+
|
||||||
|
In Thunderbird 2:
|
||||||
|
Edit..Preferences..Composition, wrap plain text messages at 0
|
||||||
|
+
|
||||||
|
In Thunderbird 3:
|
||||||
|
Edit..Preferences..Advanced..Config Editor. Search for
|
||||||
|
"mail.wrap_long_lines".
|
||||||
|
Toggle it to make sure it is set to `false`. Also, search for
|
||||||
|
"mailnews.wraplength" and set the value to 0.
|
||||||
|
|
||||||
|
3. Disable the use of format=flowed:
|
||||||
|
Edit..Preferences..Advanced..Config Editor. Search for
|
||||||
|
"mailnews.send_plaintext_flowed".
|
||||||
|
Toggle it to make sure it is set to `false`.
|
||||||
|
|
||||||
|
After that is done, you should be able to compose email as you
|
||||||
|
otherwise would (cut + paste, 'git format-patch' | 'git imap-send', etc),
|
||||||
|
and the patches will not be mangled.
|
||||||
|
|
||||||
|
Approach #3 (external editor)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The following Thunderbird extensions are needed:
|
||||||
|
AboutConfig from https://mjg.github.io/AboutConfig/ and
|
||||||
|
External Editor from https://globs.org/articles.php?lng=en&pg=8
|
||||||
|
|
||||||
|
1. Prepare the patch as a text file using your method of choice.
|
||||||
|
|
||||||
|
2. Before opening a compose window, use Edit->Account Settings to
|
||||||
|
uncheck the "Compose messages in HTML format" setting in the
|
||||||
|
"Composition & Addressing" panel of the account to be used to
|
||||||
|
send the patch.
|
||||||
|
|
||||||
|
3. In the main Thunderbird window, 'before' you open the compose
|
||||||
|
window for the patch, use Tools->about:config to set the
|
||||||
|
following to the indicated values:
|
||||||
|
+
|
||||||
|
----------
|
||||||
|
mailnews.send_plaintext_flowed => false
|
||||||
|
mailnews.wraplength => 0
|
||||||
|
----------
|
||||||
|
|
||||||
|
4. Open a compose window and click the external editor icon.
|
||||||
|
|
||||||
|
5. In the external editor window, read in the patch file and exit
|
||||||
|
the editor normally.
|
||||||
|
|
||||||
|
Side note: it may be possible to do step 2 with
|
||||||
|
about:config and the following settings but no one's tried yet.
|
||||||
|
|
||||||
|
----------
|
||||||
|
mail.html_compose => false
|
||||||
|
mail.identity.default.compose_html => false
|
||||||
|
mail.identity.id?.compose_html => false
|
||||||
|
----------
|
||||||
|
|
||||||
|
There is a script in contrib/thunderbird-patch-inline which can help
|
||||||
|
you include patches with Thunderbird in an easy way. To use it, do the
|
||||||
|
steps above and then use the script as the external editor.
|
||||||
|
|
||||||
|
KMail
|
||||||
|
~~~~~
|
||||||
|
This should help you to submit patches inline using KMail.
|
||||||
|
|
||||||
|
1. Prepare the patch as a text file.
|
||||||
|
|
||||||
|
2. Click on New Mail.
|
||||||
|
|
||||||
|
3. Go under "Options" in the Composer window and be sure that
|
||||||
|
"Word wrap" is not set.
|
||||||
|
|
||||||
|
4. Use Message -> Insert file... and insert the patch.
|
||||||
|
|
||||||
|
5. Back in the compose window: add whatever other text you wish to the
|
||||||
|
message, complete the addressing and subject fields, and press send.
|
||||||
|
|
||||||
|
BASE TREE INFORMATION
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The base tree information block is used for maintainers or third party
|
||||||
|
testers to know the exact state the patch series applies to. It consists
|
||||||
|
of the 'base commit', which is a well-known commit that is part of the
|
||||||
|
stable part of the project history everybody else works off of, and zero
|
||||||
|
or more 'prerequisite patches', which are well-known patches in flight
|
||||||
|
that is not yet part of the 'base commit' that need to be applied on top
|
||||||
|
of 'base commit' in topological order before the patches can be applied.
|
||||||
|
|
||||||
|
The 'base commit' is shown as "base-commit: " followed by the 40-hex of
|
||||||
|
the commit object name. A 'prerequisite patch' is shown as
|
||||||
|
"prerequisite-patch-id: " followed by the 40-hex 'patch id', which can
|
||||||
|
be obtained by passing the patch through the `git patch-id --stable`
|
||||||
|
command.
|
||||||
|
|
||||||
|
Imagine that on top of the public commit P, you applied well-known
|
||||||
|
patches X, Y and Z from somebody else, and then built your three-patch
|
||||||
|
series A, B, C, the history would be like:
|
||||||
|
|
||||||
|
................................................
|
||||||
|
---P---X---Y---Z---A---B---C
|
||||||
|
................................................
|
||||||
|
|
||||||
|
With `git format-patch --base=P -3 C` (or variants thereof, e.g. with
|
||||||
|
`--cover-letter` or using `Z..C` instead of `-3 C` to specify the
|
||||||
|
range), the base tree information block is shown at the end of the
|
||||||
|
first message the command outputs (either the first patch, or the
|
||||||
|
cover letter), like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
base-commit: P
|
||||||
|
prerequisite-patch-id: X
|
||||||
|
prerequisite-patch-id: Y
|
||||||
|
prerequisite-patch-id: Z
|
||||||
|
------------
|
||||||
|
|
||||||
|
For non-linear topology, such as
|
||||||
|
|
||||||
|
................................................
|
||||||
|
---P---X---A---M---C
|
||||||
|
\ /
|
||||||
|
Y---Z---B
|
||||||
|
................................................
|
||||||
|
|
||||||
|
You can also use `git format-patch --base=P -3 C` to generate patches
|
||||||
|
for A, B and C, and the identifiers for P, X, Y, Z are appended at the
|
||||||
|
end of the first message.
|
||||||
|
|
||||||
|
If set `--base=auto` in cmdline, it will automatically compute
|
||||||
|
the base commit as the merge base of tip commit of the remote-tracking
|
||||||
|
branch and revision-range specified in cmdline.
|
||||||
|
For a local branch, you need to make it to track a remote branch by `git branch
|
||||||
|
--set-upstream-to` before using this option.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Extract commits between revisions R1 and R2, and apply them on top of
|
||||||
|
the current branch using 'git am' to cherry-pick them:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git format-patch -k --stdout R1..R2 | git am -3 -k
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Extract all commits which are in the current branch but not in the
|
||||||
|
origin branch:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git format-patch origin
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
For each commit a separate file is created in the current directory.
|
||||||
|
|
||||||
|
* Extract all commits that lead to 'origin' since the inception of the
|
||||||
|
project:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git format-patch --root origin
|
||||||
|
------------
|
||||||
|
|
||||||
|
* The same as the previous one:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git format-patch -M -B origin
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
Additionally, it detects and handles renames and complete rewrites
|
||||||
|
intelligently to produce a renaming patch. A renaming patch reduces
|
||||||
|
the amount of text output, and generally makes it easier to review.
|
||||||
|
Note that non-Git "patch" programs won't understand renaming patches, so
|
||||||
|
use it only when you know the recipient uses Git to apply your patch.
|
||||||
|
|
||||||
|
* Extract three topmost commits from the current branch and format them
|
||||||
|
as e-mailable patches:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git format-patch -3
|
||||||
|
------------
|
||||||
|
|
||||||
|
CAVEATS
|
||||||
|
-------
|
||||||
|
|
||||||
|
Note that `format-patch` will omit merge commits from the output, even
|
||||||
|
if they are part of the requested range. A simple "patch" does not
|
||||||
|
include enough information for the receiving end to reproduce the same
|
||||||
|
merge commit.
|
||||||
|
|
||||||
|
=== PATCH APPLICATION
|
||||||
|
|
||||||
|
include::format-patch-caveats.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-am[1], linkgit:git-send-email[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
22
app/src/main/assets/manpages/git-fsck-objects.txt
Normal file
22
app/src/main/assets/manpages/git-fsck-objects.txt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
git-fsck-objects(1)
|
||||||
|
===================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fsck-objects - Verifies the connectivity and validity of the objects in the database
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git fsck-objects' ...
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This is a synonym for linkgit:git-fsck[1]. Please refer to the
|
||||||
|
documentation of that command.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
189
app/src/main/assets/manpages/git-fsck.txt
Normal file
189
app/src/main/assets/manpages/git-fsck.txt
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
git-fsck(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fsck - Verifies the connectivity and validity of the objects in the database
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git fsck' [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
|
||||||
|
[--[no-]full] [--strict] [--verbose] [--lost-found]
|
||||||
|
[--[no-]dangling] [--[no-]progress] [--connectivity-only]
|
||||||
|
[--[no-]name-objects] [--[no-]references] [<object>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Verifies the connectivity and validity of the objects in the database.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<object>::
|
||||||
|
An object to treat as the head of an unreachability trace.
|
||||||
|
+
|
||||||
|
If no objects are given, 'git fsck' defaults to using the
|
||||||
|
index file, all SHA-1 references in the `refs` namespace, and all reflogs
|
||||||
|
(unless --no-reflogs is given) as heads.
|
||||||
|
|
||||||
|
--unreachable::
|
||||||
|
Print out objects that exist but that aren't reachable from any
|
||||||
|
of the reference nodes.
|
||||||
|
|
||||||
|
--dangling::
|
||||||
|
--no-dangling::
|
||||||
|
Print objects that exist but that are never 'directly' used (default).
|
||||||
|
`--no-dangling` can be used to omit this information from the output.
|
||||||
|
|
||||||
|
--root::
|
||||||
|
Report root nodes.
|
||||||
|
|
||||||
|
--tags::
|
||||||
|
Report tags.
|
||||||
|
|
||||||
|
--cache::
|
||||||
|
Consider any object recorded in the index also as a head node for
|
||||||
|
an unreachability trace.
|
||||||
|
|
||||||
|
--no-reflogs::
|
||||||
|
Do not consider commits that are referenced only by an
|
||||||
|
entry in a reflog to be reachable. This option is meant
|
||||||
|
only to search for commits that used to be in a ref, but
|
||||||
|
now aren't, but are still in that corresponding reflog.
|
||||||
|
|
||||||
|
--full::
|
||||||
|
Check not just objects in GIT_OBJECT_DIRECTORY
|
||||||
|
($GIT_DIR/objects), but also the ones found in alternate
|
||||||
|
object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES
|
||||||
|
or $GIT_DIR/objects/info/alternates,
|
||||||
|
and in packed Git archives found in $GIT_DIR/objects/pack
|
||||||
|
and corresponding pack subdirectories in alternate
|
||||||
|
object pools. This is now default; you can turn it off
|
||||||
|
with --no-full.
|
||||||
|
|
||||||
|
--connectivity-only::
|
||||||
|
Check only the connectivity of reachable objects, making sure
|
||||||
|
that any objects referenced by a reachable tag, commit, or tree
|
||||||
|
are present. This speeds up the operation by avoiding reading
|
||||||
|
blobs entirely (though it does still check that referenced blobs
|
||||||
|
exist). This will detect corruption in commits and trees, but
|
||||||
|
not do any semantic checks (e.g., for format errors). Corruption
|
||||||
|
in blob objects will not be detected at all.
|
||||||
|
+
|
||||||
|
Unreachable tags, commits, and trees will also be accessed to find the
|
||||||
|
tips of dangling segments of history. Use `--no-dangling` if you don't
|
||||||
|
care about this output and want to speed it up further.
|
||||||
|
|
||||||
|
--strict::
|
||||||
|
Enable more strict checking, namely to catch a file mode
|
||||||
|
recorded with g+w bit set, which was created by older
|
||||||
|
versions of Git. Existing repositories, including the
|
||||||
|
Linux kernel, Git itself, and sparse repository have old
|
||||||
|
objects that trigger this check, but it is recommended
|
||||||
|
to check new projects with this flag.
|
||||||
|
|
||||||
|
--verbose::
|
||||||
|
Be chatty.
|
||||||
|
|
||||||
|
--lost-found::
|
||||||
|
Write dangling objects into .git/lost-found/commit/ or
|
||||||
|
.git/lost-found/other/, depending on type. If the object is
|
||||||
|
a blob, the contents are written into the file, rather than
|
||||||
|
its object name.
|
||||||
|
|
||||||
|
--name-objects::
|
||||||
|
When displaying names of reachable objects, in addition to the
|
||||||
|
SHA-1 also display a name that describes *how* they are reachable,
|
||||||
|
compatible with linkgit:git-rev-parse[1], e.g.
|
||||||
|
`HEAD@{1234567890}~25^2:src/`.
|
||||||
|
|
||||||
|
--progress::
|
||||||
|
--no-progress::
|
||||||
|
Progress status is reported on the standard error stream by
|
||||||
|
default when it is attached to a terminal, unless
|
||||||
|
--no-progress or --verbose is specified. --progress forces
|
||||||
|
progress status even if the standard error stream is not
|
||||||
|
directed to a terminal.
|
||||||
|
|
||||||
|
--references::
|
||||||
|
--no-references::
|
||||||
|
Control whether to check the references database consistency
|
||||||
|
via 'git refs verify'. See linkgit:git-refs[1] for details.
|
||||||
|
The default is to check the references database.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/fsck.adoc[]
|
||||||
|
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
git-fsck tests SHA-1 and general object sanity, and it does full tracking
|
||||||
|
of the resulting reachability and everything else. It prints out any
|
||||||
|
corruption it finds (missing or bad objects), and if you use the
|
||||||
|
`--unreachable` flag it will also print out objects that exist but that
|
||||||
|
aren't reachable from any of the specified head nodes (or the default
|
||||||
|
set, as mentioned above).
|
||||||
|
|
||||||
|
Any corrupt objects you will have to find in backups or other archives
|
||||||
|
(i.e., you can just remove them and do an 'rsync' with some other site in
|
||||||
|
the hopes that somebody else has the object you have corrupted).
|
||||||
|
|
||||||
|
If core.commitGraph is true, the commit-graph file will also be inspected
|
||||||
|
using 'git commit-graph verify'. See linkgit:git-commit-graph[1].
|
||||||
|
|
||||||
|
Extracted Diagnostics
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
unreachable <type> <object>::
|
||||||
|
The <type> object <object>, isn't actually referred to directly
|
||||||
|
or indirectly in any of the trees or commits seen. This can
|
||||||
|
mean that there's another root node that you're not specifying
|
||||||
|
or that the tree is corrupt. If you haven't missed a root node
|
||||||
|
then you might as well delete unreachable nodes since they
|
||||||
|
can't be used.
|
||||||
|
|
||||||
|
missing <type> <object>::
|
||||||
|
The <type> object <object>, is referred to but isn't present in
|
||||||
|
the database.
|
||||||
|
|
||||||
|
dangling <type> <object>::
|
||||||
|
The <type> object <object>, is present in the database but never
|
||||||
|
'directly' used. A dangling commit could be a root node.
|
||||||
|
|
||||||
|
hash mismatch <object>::
|
||||||
|
The database has an object whose hash doesn't match the
|
||||||
|
object database value.
|
||||||
|
This indicates a serious data integrity problem.
|
||||||
|
|
||||||
|
|
||||||
|
FSCK MESSAGES
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following lists the types of errors `git fsck` detects and what
|
||||||
|
each error means, with their default severity. The severity of the
|
||||||
|
error, other than those that are marked as "(FATAL)", can be tweaked
|
||||||
|
by setting the corresponding `fsck.<msg-id>` configuration variable.
|
||||||
|
|
||||||
|
include::fsck-msgids.adoc[]
|
||||||
|
|
||||||
|
|
||||||
|
Environment Variables
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
GIT_OBJECT_DIRECTORY::
|
||||||
|
used to specify the object database root (usually $GIT_DIR/objects)
|
||||||
|
|
||||||
|
GIT_INDEX_FILE::
|
||||||
|
used to specify the index file of the index
|
||||||
|
|
||||||
|
GIT_ALTERNATE_OBJECT_DIRECTORIES::
|
||||||
|
used to specify additional object database roots (usually unset)
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
106
app/src/main/assets/manpages/git-fsmonitor--daemon.txt
Normal file
106
app/src/main/assets/manpages/git-fsmonitor--daemon.txt
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
git-fsmonitor{litdd}daemon(1)
|
||||||
|
=============================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-fsmonitor--daemon - A Built-in Filesystem Monitor
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git fsmonitor{litdd}daemon' start
|
||||||
|
'git fsmonitor{litdd}daemon' run
|
||||||
|
'git fsmonitor{litdd}daemon' stop
|
||||||
|
'git fsmonitor{litdd}daemon' status
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
A daemon to watch the working directory for file and directory
|
||||||
|
changes using platform-specific filesystem notification facilities.
|
||||||
|
|
||||||
|
This daemon communicates directly with commands like `git status`
|
||||||
|
using the link:technical/api-simple-ipc.html[simple IPC] interface
|
||||||
|
instead of the slower linkgit:githooks[5] interface.
|
||||||
|
|
||||||
|
This daemon is built into Git so that no third-party tools are
|
||||||
|
required.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
start::
|
||||||
|
Starts a daemon in the background.
|
||||||
|
|
||||||
|
run::
|
||||||
|
Runs a daemon in the foreground.
|
||||||
|
|
||||||
|
stop::
|
||||||
|
Stops the daemon running in the current working
|
||||||
|
directory, if present.
|
||||||
|
|
||||||
|
status::
|
||||||
|
Exits with zero status if a daemon is watching the
|
||||||
|
current working directory.
|
||||||
|
|
||||||
|
REMARKS
|
||||||
|
-------
|
||||||
|
|
||||||
|
This daemon is a long running process used to watch a single working
|
||||||
|
directory and maintain a list of the recently changed files and
|
||||||
|
directories. Performance of commands such as `git status` can be
|
||||||
|
increased if they just ask for a summary of changes to the working
|
||||||
|
directory and can avoid scanning the disk.
|
||||||
|
|
||||||
|
When `core.fsmonitor` is set to `true` (see linkgit:git-config[1])
|
||||||
|
commands, such as `git status`, will ask the daemon for changes and
|
||||||
|
automatically start it (if necessary).
|
||||||
|
|
||||||
|
For more information see the "File System Monitor" section in
|
||||||
|
linkgit:git-update-index[1].
|
||||||
|
|
||||||
|
CAVEATS
|
||||||
|
-------
|
||||||
|
|
||||||
|
The fsmonitor daemon does not currently know about submodules and does
|
||||||
|
not know to filter out filesystem events that happen within a
|
||||||
|
submodule. If fsmonitor daemon is watching a super repo and a file is
|
||||||
|
modified within the working directory of a submodule, it will report
|
||||||
|
the change (as happening against the super repo). However, the client
|
||||||
|
will properly ignore these extra events, so performance may be affected
|
||||||
|
but it will not cause an incorrect result.
|
||||||
|
|
||||||
|
By default, the fsmonitor daemon refuses to work with network-mounted
|
||||||
|
repositories; this may be overridden by setting `fsmonitor.allowRemote` to
|
||||||
|
`true`. Note, however, that the fsmonitor daemon is not guaranteed to work
|
||||||
|
correctly with all network-mounted repositories, so such use is considered
|
||||||
|
experimental.
|
||||||
|
|
||||||
|
On Mac OS, the inter-process communication (IPC) between various Git
|
||||||
|
commands and the fsmonitor daemon is done via a Unix domain socket (UDS) -- a
|
||||||
|
special type of file -- which is supported by native Mac OS filesystems,
|
||||||
|
but not on network-mounted filesystems, NTFS, or FAT32. Other filesystems
|
||||||
|
may or may not have the needed support; the fsmonitor daemon is not guaranteed
|
||||||
|
to work with these filesystems and such use is considered experimental.
|
||||||
|
|
||||||
|
By default, the socket is created in the `.git` directory. However, if the
|
||||||
|
`.git` directory is on a network-mounted filesystem, it will instead be
|
||||||
|
created at `$HOME/.git-fsmonitor-*` unless `$HOME` itself is on a
|
||||||
|
network-mounted filesystem, in which case you must set the configuration
|
||||||
|
variable `fsmonitor.socketDir` to the path of a directory on a Mac OS native
|
||||||
|
filesystem in which to create the socket file.
|
||||||
|
|
||||||
|
If none of the above directories (`.git`, `$HOME`, or `fsmonitor.socketDir`)
|
||||||
|
is on a native Mac OS file filesystem the fsmonitor daemon will report an
|
||||||
|
error that will cause the daemon and the currently running command to exit.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/fsmonitor--daemon.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
187
app/src/main/assets/manpages/git-gc.txt
Normal file
187
app/src/main/assets/manpages/git-gc.txt
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
git-gc(1)
|
||||||
|
=========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-gc - Cleanup unnecessary files and optimize the local repository
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git gc' [--aggressive] [--auto] [--[no-]detach] [--quiet] [--prune=<date> | --no-prune] [--force] [--keep-largest-pack]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Runs a number of housekeeping tasks within the current repository,
|
||||||
|
such as compressing file revisions (to reduce disk space and increase
|
||||||
|
performance), removing unreachable objects which may have been
|
||||||
|
created from prior invocations of 'git add', packing refs, pruning
|
||||||
|
reflog, rerere metadata or stale working trees. May also update ancillary
|
||||||
|
indexes such as the commit-graph.
|
||||||
|
|
||||||
|
When common porcelain operations that create objects are run, they
|
||||||
|
will check whether the repository has grown substantially since the
|
||||||
|
last maintenance, and if so run `git gc` automatically. See `gc.auto`
|
||||||
|
below for how to disable this behavior.
|
||||||
|
|
||||||
|
Running `git gc` manually should only be needed when adding objects to
|
||||||
|
a repository without regularly running such porcelain commands, to do
|
||||||
|
a one-off repository optimization, or e.g. to clean up a suboptimal
|
||||||
|
mass-import. See the "PACKFILE OPTIMIZATION" section in
|
||||||
|
linkgit:git-fast-import[1] for more details on the import case.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--aggressive::
|
||||||
|
Usually 'git gc' runs very quickly while providing good disk
|
||||||
|
space utilization and performance. This option will cause
|
||||||
|
'git gc' to more aggressively optimize the repository at the expense
|
||||||
|
of taking much more time. The effects of this optimization are
|
||||||
|
mostly persistent. See the "AGGRESSIVE" section below for details.
|
||||||
|
|
||||||
|
--auto::
|
||||||
|
With this option, 'git gc' checks whether any housekeeping is
|
||||||
|
required; if not, it exits without performing any work.
|
||||||
|
+
|
||||||
|
See the `gc.auto` option in the "CONFIGURATION" section below for how
|
||||||
|
this heuristic works.
|
||||||
|
+
|
||||||
|
Once housekeeping is triggered by exceeding the limits of
|
||||||
|
configuration options such as `gc.auto` and `gc.autoPackLimit`, all
|
||||||
|
other housekeeping tasks (e.g. rerere, working trees, reflog...) will
|
||||||
|
be performed as well.
|
||||||
|
|
||||||
|
--detach::
|
||||||
|
--no-detach::
|
||||||
|
Run in the background if the system supports it. This option overrides
|
||||||
|
the `gc.autoDetach` config.
|
||||||
|
|
||||||
|
--cruft::
|
||||||
|
--no-cruft::
|
||||||
|
When expiring unreachable objects, pack them separately into a
|
||||||
|
cruft pack instead of storing them as loose objects. `--cruft`
|
||||||
|
is on by default.
|
||||||
|
|
||||||
|
--max-cruft-size=<n>::
|
||||||
|
When packing unreachable objects into a cruft pack, limit the
|
||||||
|
size of new cruft packs to be at most `<n>` bytes. Overrides any
|
||||||
|
value specified via the `gc.maxCruftSize` configuration. See
|
||||||
|
the `--max-cruft-size` option of linkgit:git-repack[1] for
|
||||||
|
more.
|
||||||
|
|
||||||
|
--expire-to=<dir>::
|
||||||
|
When packing unreachable objects into a cruft pack, write a cruft
|
||||||
|
pack containing pruned objects (if any) to the directory `<dir>`.
|
||||||
|
This option only has an effect when used together with `--cruft`.
|
||||||
|
See the `--expire-to` option of linkgit:git-repack[1] for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
--prune=<date>::
|
||||||
|
Prune loose objects older than date (default is 2 weeks ago,
|
||||||
|
overridable by the config variable `gc.pruneExpire`).
|
||||||
|
--prune=now prunes loose objects regardless of their age and
|
||||||
|
increases the risk of corruption if another process is writing to
|
||||||
|
the repository concurrently; see "NOTES" below. --prune is on by
|
||||||
|
default.
|
||||||
|
|
||||||
|
--no-prune::
|
||||||
|
Do not prune any loose objects.
|
||||||
|
|
||||||
|
--quiet::
|
||||||
|
Suppress all progress reports.
|
||||||
|
|
||||||
|
--force::
|
||||||
|
Force `git gc` to run even if there may be another `git gc`
|
||||||
|
instance running on this repository.
|
||||||
|
|
||||||
|
--keep-largest-pack::
|
||||||
|
All packs except the largest non-cruft pack, any packs marked
|
||||||
|
with a `.keep` file, and any cruft pack(s) are consolidated into
|
||||||
|
a single pack. When this option is used, `gc.bigPackThreshold`
|
||||||
|
is ignored.
|
||||||
|
|
||||||
|
AGGRESSIVE
|
||||||
|
----------
|
||||||
|
|
||||||
|
When the `--aggressive` option is supplied, linkgit:git-repack[1] will
|
||||||
|
be invoked with the `-f` flag, which in turn will pass
|
||||||
|
`--no-reuse-delta` to linkgit:git-pack-objects[1]. This will throw
|
||||||
|
away any existing deltas and re-compute them, at the expense of
|
||||||
|
spending much more time on the repacking.
|
||||||
|
|
||||||
|
The effects of this are mostly persistent, e.g. when packs and loose
|
||||||
|
objects are coalesced into one another pack the existing deltas in
|
||||||
|
that pack might get re-used, but there are also various cases where we
|
||||||
|
might pick a sub-optimal delta from a newer pack instead.
|
||||||
|
|
||||||
|
Furthermore, supplying `--aggressive` will tweak the `--depth` and
|
||||||
|
`--window` options passed to linkgit:git-repack[1]. See the
|
||||||
|
`gc.aggressiveDepth` and `gc.aggressiveWindow` settings below. By
|
||||||
|
using a larger window size we're more likely to find more optimal
|
||||||
|
deltas.
|
||||||
|
|
||||||
|
It's probably not worth it to use this option on a given repository
|
||||||
|
without running tailored performance benchmarks on it. It takes a lot
|
||||||
|
more time, and the resulting space/delta optimization may or may not
|
||||||
|
be worth it. Not using this at all is the right trade-off for most
|
||||||
|
users and their repositories.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/gc.adoc[]
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
-----
|
||||||
|
|
||||||
|
'git gc' tries very hard not to delete objects that are referenced
|
||||||
|
anywhere in your repository. In particular, it will keep not only
|
||||||
|
objects referenced by your current set of branches and tags, but also
|
||||||
|
objects referenced by the index, remote-tracking branches, reflogs
|
||||||
|
(which may reference commits in branches that were later amended or
|
||||||
|
rewound), and anything else in the refs/* namespace. Note that a note
|
||||||
|
(of the kind created by 'git notes') attached to an object does not
|
||||||
|
contribute in keeping the object alive. If you are expecting some
|
||||||
|
objects to be deleted and they aren't, check all of those locations
|
||||||
|
and decide whether it makes sense in your case to remove those
|
||||||
|
references.
|
||||||
|
|
||||||
|
On the other hand, when 'git gc' runs concurrently with another process,
|
||||||
|
there is a risk of it deleting an object that the other process is using
|
||||||
|
but hasn't created a reference to. This may just cause the other process
|
||||||
|
to fail or may corrupt the repository if the other process later adds a
|
||||||
|
reference to the deleted object. Git has two features that significantly
|
||||||
|
mitigate this problem:
|
||||||
|
|
||||||
|
. Any object with modification time newer than the `--prune` date is kept,
|
||||||
|
along with everything reachable from it.
|
||||||
|
|
||||||
|
. Most operations that add an object to the database update the
|
||||||
|
modification time of the object if it is already present so that #1
|
||||||
|
applies.
|
||||||
|
|
||||||
|
However, these features fall short of a complete solution, so users who
|
||||||
|
run commands concurrently have to live with some risk of corruption (which
|
||||||
|
seems to be low in practice).
|
||||||
|
|
||||||
|
HOOKS
|
||||||
|
-----
|
||||||
|
|
||||||
|
The 'git gc --auto' command will run the 'pre-auto-gc' hook. See
|
||||||
|
linkgit:githooks[5] for more information.
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-prune[1]
|
||||||
|
linkgit:git-reflog[1]
|
||||||
|
linkgit:git-repack[1]
|
||||||
|
linkgit:git-rerere[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
30
app/src/main/assets/manpages/git-get-tar-commit-id.txt
Normal file
30
app/src/main/assets/manpages/git-get-tar-commit-id.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
git-get-tar-commit-id(1)
|
||||||
|
========================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-get-tar-commit-id - Extract commit ID from an archive created using git-archive
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git get-tar-commit-id'
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Read a tar archive created by 'git archive' from the standard input
|
||||||
|
and extract the commit ID stored in it. It reads only the first
|
||||||
|
1024 bytes of input, thus its runtime is not influenced by the size
|
||||||
|
of the tar archive very much.
|
||||||
|
|
||||||
|
If no commit ID is found, 'git get-tar-commit-id' quietly exits with a
|
||||||
|
return code of 1. This can happen if the archive had not been created
|
||||||
|
using 'git archive' or if the first parameter of 'git archive' had been
|
||||||
|
a tree ID instead of a commit ID or tag.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
360
app/src/main/assets/manpages/git-grep.txt
Normal file
360
app/src/main/assets/manpages/git-grep.txt
Normal file
@@ -0,0 +1,360 @@
|
|||||||
|
git-grep(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-grep - Print lines matching a pattern
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git grep' [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
|
||||||
|
[-v | --invert-match] [-h|-H] [--full-name]
|
||||||
|
[-E | --extended-regexp] [-G | --basic-regexp]
|
||||||
|
[-P | --perl-regexp]
|
||||||
|
[-F | --fixed-strings] [-n | --line-number] [--column]
|
||||||
|
[-l | --files-with-matches] [-L | --files-without-match]
|
||||||
|
[(-O | --open-files-in-pager) [<pager>]]
|
||||||
|
[-z | --null]
|
||||||
|
[ -o | --only-matching ] [-c | --count] [--all-match] [-q | --quiet]
|
||||||
|
[--max-depth <depth>] [--[no-]recursive]
|
||||||
|
[--color[=<when>] | --no-color]
|
||||||
|
[--break] [--heading] [-p | --show-function]
|
||||||
|
[-A <post-context>] [-B <pre-context>] [-C <context>]
|
||||||
|
[-W | --function-context]
|
||||||
|
[(-m | --max-count) <num>]
|
||||||
|
[--threads <num>]
|
||||||
|
[-f <file>] [-e] <pattern>
|
||||||
|
[--and|--or|--not|(|)|-e <pattern>...]
|
||||||
|
[--recurse-submodules] [--parent-basename <basename>]
|
||||||
|
[ [--[no-]exclude-standard] [--cached | --untracked | --no-index] | <tree>...]
|
||||||
|
[--] [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Look for specified patterns in the tracked files in the work tree, blobs
|
||||||
|
registered in the index file, or blobs in given tree objects. Patterns
|
||||||
|
are lists of one or more search expressions separated by newline
|
||||||
|
characters. An empty string as search expression matches all lines.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--cached::
|
||||||
|
Instead of searching tracked files in the working tree, search
|
||||||
|
blobs registered in the index file.
|
||||||
|
|
||||||
|
--untracked::
|
||||||
|
In addition to searching in the tracked files in the working
|
||||||
|
tree, search also in untracked files.
|
||||||
|
|
||||||
|
--no-index::
|
||||||
|
Search files in the current directory that is not managed by Git,
|
||||||
|
or by ignoring that the current directory is managed by Git. This
|
||||||
|
is rather similar to running the regular `grep(1)` utility with its
|
||||||
|
`-r` option specified, but with some additional benefits, such as
|
||||||
|
using pathspec patterns to limit paths; see the 'pathspec' entry
|
||||||
|
in linkgit:gitglossary[7] for more information.
|
||||||
|
+
|
||||||
|
This option cannot be used together with `--cached` or `--untracked`.
|
||||||
|
See also `grep.fallbackToNoIndex` in 'CONFIGURATION' below.
|
||||||
|
|
||||||
|
--no-exclude-standard::
|
||||||
|
Also search in ignored files by not honoring the `.gitignore`
|
||||||
|
mechanism. Only useful with `--untracked`.
|
||||||
|
|
||||||
|
--exclude-standard::
|
||||||
|
Do not pay attention to ignored files specified via the `.gitignore`
|
||||||
|
mechanism. Only useful when searching files in the current directory
|
||||||
|
with `--no-index`.
|
||||||
|
|
||||||
|
--recurse-submodules::
|
||||||
|
Recursively search in each submodule that is active and
|
||||||
|
checked out in the repository. When used in combination with the
|
||||||
|
_<tree>_ option the prefix of all submodule output will be the name of
|
||||||
|
the parent project's _<tree>_ object. This option cannot be used together
|
||||||
|
with `--untracked`, and it has no effect if `--no-index` is specified.
|
||||||
|
|
||||||
|
-a::
|
||||||
|
--text::
|
||||||
|
Process binary files as if they were text.
|
||||||
|
|
||||||
|
--textconv::
|
||||||
|
Honor textconv filter settings.
|
||||||
|
|
||||||
|
--no-textconv::
|
||||||
|
Do not honor textconv filter settings.
|
||||||
|
This is the default.
|
||||||
|
|
||||||
|
-i::
|
||||||
|
--ignore-case::
|
||||||
|
Ignore case differences between the patterns and the
|
||||||
|
files.
|
||||||
|
|
||||||
|
-I::
|
||||||
|
Don't match the pattern in binary files.
|
||||||
|
|
||||||
|
--max-depth <depth>::
|
||||||
|
For each <pathspec> given on command line, descend at most <depth>
|
||||||
|
levels of directories. A value of -1 means no limit.
|
||||||
|
This option is ignored if <pathspec> contains active wildcards.
|
||||||
|
In other words if "a*" matches a directory named "a*",
|
||||||
|
"*" is matched literally so --max-depth is still effective.
|
||||||
|
|
||||||
|
-r::
|
||||||
|
--recursive::
|
||||||
|
Same as `--max-depth=-1`; this is the default.
|
||||||
|
|
||||||
|
--no-recursive::
|
||||||
|
Same as `--max-depth=0`.
|
||||||
|
|
||||||
|
-w::
|
||||||
|
--word-regexp::
|
||||||
|
Match the pattern only at word boundary (either begin at the
|
||||||
|
beginning of a line, or preceded by a non-word character; end at
|
||||||
|
the end of a line or followed by a non-word character).
|
||||||
|
|
||||||
|
-v::
|
||||||
|
--invert-match::
|
||||||
|
Select non-matching lines.
|
||||||
|
|
||||||
|
-h::
|
||||||
|
-H::
|
||||||
|
By default, the command shows the filename for each
|
||||||
|
match. `-h` option is used to suppress this output.
|
||||||
|
`-H` is there for completeness and does not do anything
|
||||||
|
except it overrides `-h` given earlier on the command
|
||||||
|
line.
|
||||||
|
|
||||||
|
--full-name::
|
||||||
|
When run from a subdirectory, the command usually
|
||||||
|
outputs paths relative to the current directory. This
|
||||||
|
option forces paths to be output relative to the project
|
||||||
|
top directory.
|
||||||
|
|
||||||
|
-E::
|
||||||
|
--extended-regexp::
|
||||||
|
-G::
|
||||||
|
--basic-regexp::
|
||||||
|
Use POSIX extended/basic regexp for patterns. Default
|
||||||
|
is to use basic regexp.
|
||||||
|
|
||||||
|
-P::
|
||||||
|
--perl-regexp::
|
||||||
|
Use Perl-compatible regular expressions for patterns.
|
||||||
|
+
|
||||||
|
Support for these types of regular expressions is an optional
|
||||||
|
compile-time dependency. If Git wasn't compiled with support for them
|
||||||
|
providing this option will cause it to die.
|
||||||
|
|
||||||
|
-F::
|
||||||
|
--fixed-strings::
|
||||||
|
Use fixed strings for patterns (don't interpret pattern
|
||||||
|
as a regex).
|
||||||
|
|
||||||
|
-n::
|
||||||
|
--line-number::
|
||||||
|
Prefix the line number to matching lines.
|
||||||
|
|
||||||
|
--column::
|
||||||
|
Prefix the 1-indexed byte-offset of the first match from the start of the
|
||||||
|
matching line.
|
||||||
|
|
||||||
|
-l::
|
||||||
|
--files-with-matches::
|
||||||
|
--name-only::
|
||||||
|
-L::
|
||||||
|
--files-without-match::
|
||||||
|
Instead of showing every matched line, show only the
|
||||||
|
names of files that contain (or do not contain) matches.
|
||||||
|
For better compatibility with 'git diff', `--name-only` is a
|
||||||
|
synonym for `--files-with-matches`.
|
||||||
|
|
||||||
|
-O[<pager>]::
|
||||||
|
--open-files-in-pager[=<pager>]::
|
||||||
|
Open the matching files in the pager (not the output of 'grep').
|
||||||
|
If the pager happens to be "less" or "vi", and the user
|
||||||
|
specified only one pattern, the first file is positioned at
|
||||||
|
the first match automatically. The `pager` argument is
|
||||||
|
optional; if specified, it must be stuck to the option
|
||||||
|
without a space. If `pager` is unspecified, the default pager
|
||||||
|
will be used (see `core.pager` in linkgit:git-config[1]).
|
||||||
|
|
||||||
|
-z::
|
||||||
|
--null::
|
||||||
|
Use \0 as the delimiter for pathnames in the output, and print
|
||||||
|
them verbatim. Without this option, pathnames with "unusual"
|
||||||
|
characters are quoted as explained for the configuration
|
||||||
|
variable `core.quotePath` (see linkgit:git-config[1]).
|
||||||
|
|
||||||
|
-o::
|
||||||
|
--only-matching::
|
||||||
|
Print only the matched (non-empty) parts of a matching line, with each such
|
||||||
|
part on a separate output line.
|
||||||
|
|
||||||
|
-c::
|
||||||
|
--count::
|
||||||
|
Instead of showing every matched line, show the number of
|
||||||
|
lines that match.
|
||||||
|
|
||||||
|
--color[=<when>]::
|
||||||
|
Show colored matches.
|
||||||
|
The value must be always (the default), never, or auto.
|
||||||
|
|
||||||
|
--no-color::
|
||||||
|
Turn off match highlighting, even when the configuration file
|
||||||
|
gives the default to color output.
|
||||||
|
Same as `--color=never`.
|
||||||
|
|
||||||
|
--break::
|
||||||
|
Print an empty line between matches from different files.
|
||||||
|
|
||||||
|
--heading::
|
||||||
|
Show the filename above the matches in that file instead of
|
||||||
|
at the start of each shown line.
|
||||||
|
|
||||||
|
-p::
|
||||||
|
--show-function::
|
||||||
|
Show the preceding line that contains the function name of
|
||||||
|
the match, unless the matching line is a function name itself.
|
||||||
|
The name is determined in the same way as `git diff` works out
|
||||||
|
patch hunk headers (see 'Defining a custom hunk-header' in
|
||||||
|
linkgit:gitattributes[5]).
|
||||||
|
|
||||||
|
-<num>::
|
||||||
|
-C <num>::
|
||||||
|
--context <num>::
|
||||||
|
Show <num> leading and trailing lines, and place a line
|
||||||
|
containing `--` between contiguous groups of matches.
|
||||||
|
|
||||||
|
-A <num>::
|
||||||
|
--after-context <num>::
|
||||||
|
Show <num> trailing lines, and place a line containing
|
||||||
|
`--` between contiguous groups of matches.
|
||||||
|
|
||||||
|
-B <num>::
|
||||||
|
--before-context <num>::
|
||||||
|
Show <num> leading lines, and place a line containing
|
||||||
|
`--` between contiguous groups of matches.
|
||||||
|
|
||||||
|
-W::
|
||||||
|
--function-context::
|
||||||
|
Show the surrounding text from the previous line containing a
|
||||||
|
function name up to the one before the next function name,
|
||||||
|
effectively showing the whole function in which the match was
|
||||||
|
found. The function names are determined in the same way as
|
||||||
|
`git diff` works out patch hunk headers (see 'Defining a
|
||||||
|
custom hunk-header' in linkgit:gitattributes[5]).
|
||||||
|
|
||||||
|
-m <num>::
|
||||||
|
--max-count <num>::
|
||||||
|
Limit the amount of matches per file. When using the `-v` or
|
||||||
|
`--invert-match` option, the search stops after the specified
|
||||||
|
number of non-matches. A value of -1 will return unlimited
|
||||||
|
results (the default). A value of 0 will exit immediately with
|
||||||
|
a non-zero status.
|
||||||
|
|
||||||
|
--threads <num>::
|
||||||
|
Number of `grep` worker threads to use. See 'NOTES ON THREADS'
|
||||||
|
and `grep.threads` in 'CONFIGURATION' for more information.
|
||||||
|
|
||||||
|
-f <file>::
|
||||||
|
Read patterns from <file>, one per line.
|
||||||
|
+
|
||||||
|
Passing the pattern via <file> allows for providing a search pattern
|
||||||
|
containing a \0.
|
||||||
|
+
|
||||||
|
Not all pattern types support patterns containing \0. Git will error
|
||||||
|
out if a given pattern type can't support such a pattern. The
|
||||||
|
`--perl-regexp` pattern type when compiled against the PCRE v2 backend
|
||||||
|
has the widest support for these types of patterns.
|
||||||
|
+
|
||||||
|
In versions of Git before 2.23.0 patterns containing \0 would be
|
||||||
|
silently considered fixed. This was never documented, there were also
|
||||||
|
odd and undocumented interactions between e.g. non-ASCII patterns
|
||||||
|
containing \0 and `--ignore-case`.
|
||||||
|
+
|
||||||
|
In future versions we may learn to support patterns containing \0 for
|
||||||
|
more search backends, until then we'll die when the pattern type in
|
||||||
|
question doesn't support them.
|
||||||
|
|
||||||
|
-e::
|
||||||
|
The next parameter is the pattern. This option has to be
|
||||||
|
used for patterns starting with `-` and should be used in
|
||||||
|
scripts passing user input to grep. Multiple patterns are
|
||||||
|
combined by 'or'.
|
||||||
|
|
||||||
|
--and::
|
||||||
|
--or::
|
||||||
|
--not::
|
||||||
|
( ... )::
|
||||||
|
Specify how multiple patterns are combined using Boolean
|
||||||
|
expressions. `--or` is the default operator. `--and` has
|
||||||
|
higher precedence than `--or`. `-e` has to be used for all
|
||||||
|
patterns.
|
||||||
|
|
||||||
|
--all-match::
|
||||||
|
When giving multiple pattern expressions combined with `--or`,
|
||||||
|
this flag is specified to limit the match to files that
|
||||||
|
have lines to match all of them.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Do not output matched lines; instead, exit with status 0 when
|
||||||
|
there is a match and with non-zero status when there isn't.
|
||||||
|
|
||||||
|
<tree>...::
|
||||||
|
Instead of searching tracked files in the working tree, search
|
||||||
|
blobs in the given trees.
|
||||||
|
|
||||||
|
\--::
|
||||||
|
Signals the end of options; the rest of the parameters
|
||||||
|
are <pathspec> limiters.
|
||||||
|
|
||||||
|
<pathspec>...::
|
||||||
|
If given, limit the search to paths matching at least one pattern.
|
||||||
|
Both leading paths match and glob(7) patterns are supported.
|
||||||
|
+
|
||||||
|
For more details about the <pathspec> syntax, see the 'pathspec' entry
|
||||||
|
in linkgit:gitglossary[7].
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
`git grep 'time_t' -- '*.[ch]'`::
|
||||||
|
Looks for `time_t` in all tracked .c and .h files in the working
|
||||||
|
directory and its subdirectories.
|
||||||
|
|
||||||
|
`git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)`::
|
||||||
|
Looks for a line that has `#define` and either `MAX_PATH` or
|
||||||
|
`PATH_MAX`.
|
||||||
|
|
||||||
|
`git grep --all-match -e NODE -e Unexpected`::
|
||||||
|
Looks for a line that has `NODE` or `Unexpected` in
|
||||||
|
files that have lines that match both.
|
||||||
|
|
||||||
|
`git grep solution -- :^Documentation`::
|
||||||
|
Looks for `solution`, excluding files in `Documentation`.
|
||||||
|
|
||||||
|
NOTES ON THREADS
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The `--threads` option (and the `grep.threads` configuration) will be ignored when
|
||||||
|
`--open-files-in-pager` is used, forcing a single-threaded execution.
|
||||||
|
|
||||||
|
When grepping the object store (with `--cached` or giving tree objects), running
|
||||||
|
with multiple threads might perform slower than single-threaded if `--textconv`
|
||||||
|
is given and there are too many text conversions. Thus, if low performance is
|
||||||
|
experienced in this case, it might be desirable to use `--threads=1`.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/grep.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
121
app/src/main/assets/manpages/git-gui.txt
Normal file
121
app/src/main/assets/manpages/git-gui.txt
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
git-gui(1)
|
||||||
|
==========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-gui - A portable graphical interface to Git
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git gui' [<command>] [<arguments>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
A Tcl/Tk based graphical user interface to Git. 'git gui' focuses
|
||||||
|
on allowing users to make changes to their repository by making
|
||||||
|
new commits, amending existing ones, creating branches, performing
|
||||||
|
local merges, and fetching/pushing to remote repositories.
|
||||||
|
|
||||||
|
Unlike 'gitk', 'git gui' focuses on commit generation
|
||||||
|
and single file annotation and does not show project history.
|
||||||
|
It does however supply menu actions to start a 'gitk' session from
|
||||||
|
within 'git gui'.
|
||||||
|
|
||||||
|
'git gui' is known to work on all popular UNIX systems, Mac OS X,
|
||||||
|
and Windows (under both Cygwin and MSYS). To the extent possible
|
||||||
|
OS specific user interface guidelines are followed, making 'git gui'
|
||||||
|
a fairly native interface for users.
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
--------
|
||||||
|
blame::
|
||||||
|
Start a blame viewer on the specified file on the given
|
||||||
|
version (or working directory if not specified).
|
||||||
|
|
||||||
|
browser::
|
||||||
|
Start a tree browser showing all files in the specified
|
||||||
|
commit. Files selected through the
|
||||||
|
browser are opened in the blame viewer.
|
||||||
|
|
||||||
|
citool::
|
||||||
|
Start 'git gui' and arrange to make exactly one commit before
|
||||||
|
exiting and returning to the shell. The interface is limited
|
||||||
|
to only commit actions, slightly reducing the application's
|
||||||
|
startup time and simplifying the menubar.
|
||||||
|
|
||||||
|
version::
|
||||||
|
Display the currently running version of 'git gui'.
|
||||||
|
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
`git gui blame Makefile`::
|
||||||
|
|
||||||
|
Show the contents of the file 'Makefile' in the current
|
||||||
|
working directory, and provide annotations for both the
|
||||||
|
original author of each line, and who moved the line to its
|
||||||
|
current location. The uncommitted file is annotated, and
|
||||||
|
uncommitted changes (if any) are explicitly attributed to
|
||||||
|
'Not Yet Committed'.
|
||||||
|
|
||||||
|
`git gui blame v0.99.8 Makefile`::
|
||||||
|
|
||||||
|
Show the contents of 'Makefile' in revision 'v0.99.8'
|
||||||
|
and provide annotations for each line. Unlike the above
|
||||||
|
example the file is read from the object database and not
|
||||||
|
the working directory.
|
||||||
|
|
||||||
|
`git gui blame --line=100 Makefile`::
|
||||||
|
|
||||||
|
Loads annotations as described above and automatically
|
||||||
|
scrolls the view to center on line '100'.
|
||||||
|
|
||||||
|
`git gui citool`::
|
||||||
|
|
||||||
|
Make one commit and return to the shell when it is complete.
|
||||||
|
This command returns a non-zero exit code if the window was
|
||||||
|
closed in any way other than by making a commit.
|
||||||
|
|
||||||
|
`git gui citool --amend`::
|
||||||
|
|
||||||
|
Automatically enter the 'Amend Last Commit' mode of
|
||||||
|
the interface.
|
||||||
|
|
||||||
|
`git gui citool --nocommit`::
|
||||||
|
|
||||||
|
Behave as normal citool, but instead of making a commit
|
||||||
|
simply terminate with a zero exit code. It still checks
|
||||||
|
that the index does not contain any unmerged entries, so
|
||||||
|
you can use it as a GUI version of linkgit:git-mergetool[1]
|
||||||
|
|
||||||
|
`git citool`::
|
||||||
|
|
||||||
|
Same as `git gui citool` (above).
|
||||||
|
|
||||||
|
`git gui browser maint`::
|
||||||
|
|
||||||
|
Show a browser for the tree of the 'maint' branch. Files
|
||||||
|
selected in the browser can be viewed with the internal
|
||||||
|
blame viewer.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:gitk[1]::
|
||||||
|
The Git repository browser. Shows branches, commit history
|
||||||
|
and file differences. gitk is the utility started by
|
||||||
|
'git gui''s Repository Visualize actions.
|
||||||
|
|
||||||
|
Other
|
||||||
|
-----
|
||||||
|
'git gui' is actually maintained as an independent project, but stable
|
||||||
|
versions are distributed as part of the Git suite for the convenience
|
||||||
|
of end users.
|
||||||
|
|
||||||
|
The official repository of the 'git gui' project can be found at:
|
||||||
|
|
||||||
|
https://github.com/j6t/git-gui
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
65
app/src/main/assets/manpages/git-hash-object.txt
Normal file
65
app/src/main/assets/manpages/git-hash-object.txt
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
git-hash-object(1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-hash-object - Compute object ID and optionally create an object from a file
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git hash-object' [-t <type>] [-w] [--path=<file> | --no-filters]
|
||||||
|
[--stdin [--literally]] [--] <file>...
|
||||||
|
'git hash-object' [-t <type>] [-w] --stdin-paths [--no-filters]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Computes the object ID value for an object with specified type
|
||||||
|
with the contents of the named file (which can be outside of the
|
||||||
|
work tree), and optionally writes the resulting object into the
|
||||||
|
object database. Reports its object ID to its standard output.
|
||||||
|
When <type> is not specified, it defaults to "blob".
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
-t <type>::
|
||||||
|
Specify the type of object to be created (default: "blob"). Possible
|
||||||
|
values are `commit`, `tree`, `blob`, and `tag`.
|
||||||
|
|
||||||
|
-w::
|
||||||
|
Actually write the object into the object database.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Read the object from standard input instead of from a file.
|
||||||
|
|
||||||
|
--stdin-paths::
|
||||||
|
Read file names from the standard input, one per line, instead
|
||||||
|
of from the command-line.
|
||||||
|
|
||||||
|
--path::
|
||||||
|
Hash object as if it were located at the given path. The location of
|
||||||
|
the file does not directly influence the hash value, but the path is
|
||||||
|
used to determine which Git filters should be applied to the object
|
||||||
|
before it can be placed in the object database. As a result of
|
||||||
|
applying filters, the actual blob put into the object database may
|
||||||
|
differ from the given file. This option is mainly useful for hashing
|
||||||
|
temporary files located outside of the working directory or files
|
||||||
|
read from stdin.
|
||||||
|
|
||||||
|
--no-filters::
|
||||||
|
Hash the contents as is, ignoring any input filter that would
|
||||||
|
have been chosen by the attributes mechanism, including the end-of-line
|
||||||
|
conversion. If the file is read from standard input then this
|
||||||
|
is always implied, unless the `--path` option is given.
|
||||||
|
|
||||||
|
--literally::
|
||||||
|
Allow `--stdin` to hash any garbage into a loose object which might not
|
||||||
|
otherwise pass standard object parsing or git-fsck checks. Useful for
|
||||||
|
stress-testing Git itself or reproducing characteristics of corrupt or
|
||||||
|
bogus objects encountered in the wild.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
231
app/src/main/assets/manpages/git-help.txt
Normal file
231
app/src/main/assets/manpages/git-help.txt
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
git-help(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-help - Display help information about Git
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git help' [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
|
||||||
|
'git help' [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]
|
||||||
|
'git help' [-g|--guides]
|
||||||
|
'git help' [-c|--config]
|
||||||
|
'git help' [--user-interfaces]
|
||||||
|
'git help' [--developer-interfaces]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
With no options and no '<command>' or '<doc>' given, the synopsis of the 'git'
|
||||||
|
command and a list of the most commonly used Git commands are printed
|
||||||
|
on the standard output.
|
||||||
|
|
||||||
|
If the option `--all` or `-a` is given, all available commands are
|
||||||
|
printed on the standard output.
|
||||||
|
|
||||||
|
If the option `--guides` or `-g` is given, a list of the
|
||||||
|
Git concept guides is also printed on the standard output.
|
||||||
|
|
||||||
|
If a command or other documentation is given, the relevant manual page
|
||||||
|
will be brought up. The 'man' program is used by default for this
|
||||||
|
purpose, but this can be overridden by other options or configuration
|
||||||
|
variables.
|
||||||
|
|
||||||
|
If an alias is given, git shows the definition of the alias on
|
||||||
|
standard output. To get the manual page for the aliased command, use
|
||||||
|
`git <command> --help`.
|
||||||
|
|
||||||
|
Note that `git --help ...` is identical to `git help ...` because the
|
||||||
|
former is internally converted into the latter.
|
||||||
|
|
||||||
|
To display the linkgit:git[1] man page, use `git help git`.
|
||||||
|
|
||||||
|
This page can be displayed with 'git help help' or `git help --help`.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-a::
|
||||||
|
--all::
|
||||||
|
Print all the available commands on the standard output.
|
||||||
|
|
||||||
|
--no-external-commands::
|
||||||
|
When used with `--all`, exclude the listing of external "git-*"
|
||||||
|
commands found in the `$PATH`.
|
||||||
|
|
||||||
|
--no-aliases::
|
||||||
|
When used with `--all`, exclude the listing of configured
|
||||||
|
aliases.
|
||||||
|
|
||||||
|
--verbose::
|
||||||
|
When used with `--all`, print description for all recognized
|
||||||
|
commands. This is the default.
|
||||||
|
|
||||||
|
-c::
|
||||||
|
--config::
|
||||||
|
List all available configuration variables. This is a short
|
||||||
|
summary of the list in linkgit:git-config[1].
|
||||||
|
|
||||||
|
-g::
|
||||||
|
--guides::
|
||||||
|
Print a list of the Git concept guides on the standard output.
|
||||||
|
|
||||||
|
--user-interfaces::
|
||||||
|
Print a list of the repository, command and file interfaces
|
||||||
|
documentation on the standard output.
|
||||||
|
+
|
||||||
|
In-repository file interfaces such as `.git/info/exclude` are
|
||||||
|
documented here (see linkgit:gitrepository-layout[5]), as well as
|
||||||
|
in-tree configuration such as `.mailmap` (see linkgit:gitmailmap[5]).
|
||||||
|
+
|
||||||
|
This section of the documentation also covers general or widespread
|
||||||
|
user-interface conventions (e.g. linkgit:gitcli[7]), and
|
||||||
|
pseudo-configuration such as the file-based `.git/hooks/*` interface
|
||||||
|
described in linkgit:githooks[5].
|
||||||
|
|
||||||
|
--developer-interfaces::
|
||||||
|
Print a list of file formats, protocols and other developer
|
||||||
|
interfaces documentation on the standard output.
|
||||||
|
|
||||||
|
-i::
|
||||||
|
--info::
|
||||||
|
Display manual page for the command in the 'info' format. The
|
||||||
|
'info' program will be used for that purpose.
|
||||||
|
|
||||||
|
-m::
|
||||||
|
--man::
|
||||||
|
Display manual page for the command in the 'man' format. This
|
||||||
|
option may be used to override a value set in the
|
||||||
|
`help.format` configuration variable.
|
||||||
|
+
|
||||||
|
By default the 'man' program will be used to display the manual page,
|
||||||
|
but the `man.viewer` configuration variable may be used to choose
|
||||||
|
other display programs (see below).
|
||||||
|
|
||||||
|
-w::
|
||||||
|
--web::
|
||||||
|
Display manual page for the command in the 'web' (HTML)
|
||||||
|
format. A web browser will be used for that purpose.
|
||||||
|
+
|
||||||
|
The web browser can be specified using the configuration variable
|
||||||
|
`help.browser`, or `web.browser` if the former is not set. If neither of
|
||||||
|
these config variables is set, the 'git web{litdd}browse' helper script
|
||||||
|
(called by 'git help') will pick a suitable default. See
|
||||||
|
linkgit:git-web{litdd}browse[1] for more information about this.
|
||||||
|
|
||||||
|
CONFIGURATION VARIABLES
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
help.format
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
If no command-line option is passed, the `help.format` configuration
|
||||||
|
variable will be checked. The following values are supported for this
|
||||||
|
variable; they make 'git help' behave as their corresponding command-
|
||||||
|
line option:
|
||||||
|
|
||||||
|
* "man" corresponds to '-m|--man',
|
||||||
|
* "info" corresponds to '-i|--info',
|
||||||
|
* "web" or "html" correspond to '-w|--web'.
|
||||||
|
|
||||||
|
help.browser, web.browser, and browser.<tool>.path
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The `help.browser`, `web.browser` and `browser.<tool>.path` will also
|
||||||
|
be checked if the 'web' format is chosen (either by command-line
|
||||||
|
option or configuration variable). See '-w|--web' in the OPTIONS
|
||||||
|
section above and linkgit:git-web{litdd}browse[1].
|
||||||
|
|
||||||
|
man.viewer
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
The `man.viewer` configuration variable will be checked if the 'man'
|
||||||
|
format is chosen. The following values are currently supported:
|
||||||
|
|
||||||
|
* "man": use the 'man' program as usual,
|
||||||
|
* "woman": use 'emacsclient' to launch the "woman" mode in emacs
|
||||||
|
(this only works starting with emacsclient versions 22),
|
||||||
|
* "konqueror": use 'kfmclient' to open the man page in a new konqueror
|
||||||
|
tab (see 'Note about konqueror' below).
|
||||||
|
|
||||||
|
Values for other tools can be used if there is a corresponding
|
||||||
|
`man.<tool>.cmd` configuration entry (see below).
|
||||||
|
|
||||||
|
Multiple values may be given to the `man.viewer` configuration
|
||||||
|
variable. Their corresponding programs will be tried in the order
|
||||||
|
listed in the configuration file.
|
||||||
|
|
||||||
|
For example, this configuration:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
[man]
|
||||||
|
viewer = konqueror
|
||||||
|
viewer = woman
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
will try to use konqueror first. But this may fail (for example, if
|
||||||
|
DISPLAY is not set) and in that case emacs' woman mode will be tried.
|
||||||
|
|
||||||
|
If everything fails, or if no viewer is configured, the viewer specified
|
||||||
|
in the `GIT_MAN_VIEWER` environment variable will be tried. If that
|
||||||
|
fails too, the 'man' program will be tried anyway.
|
||||||
|
|
||||||
|
man.<tool>.path
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
You can explicitly provide a full path to your preferred man viewer by
|
||||||
|
setting the configuration variable `man.<tool>.path`. For example, you
|
||||||
|
can configure the absolute path to konqueror by setting
|
||||||
|
'man.konqueror.path'. Otherwise, 'git help' assumes the tool is
|
||||||
|
available in PATH.
|
||||||
|
|
||||||
|
man.<tool>.cmd
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
When the man viewer, specified by the `man.viewer` configuration
|
||||||
|
variables, is not among the supported ones, then the corresponding
|
||||||
|
`man.<tool>.cmd` configuration variable will be looked up. If this
|
||||||
|
variable exists then the specified tool will be treated as a custom
|
||||||
|
command and a shell eval will be used to run the command with the man
|
||||||
|
page passed as arguments.
|
||||||
|
|
||||||
|
Note about konqueror
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
When 'konqueror' is specified in the `man.viewer` configuration
|
||||||
|
variable, we launch 'kfmclient' to try to open the man page on an
|
||||||
|
already opened konqueror in a new tab if possible.
|
||||||
|
|
||||||
|
For consistency, we also try such a trick if 'man.konqueror.path' is
|
||||||
|
set to something like `A_PATH_TO/konqueror`. That means we will try to
|
||||||
|
launch `A_PATH_TO/kfmclient` instead.
|
||||||
|
|
||||||
|
If you really want to use 'konqueror', then you can use something like
|
||||||
|
the following:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
[man]
|
||||||
|
viewer = konq
|
||||||
|
|
||||||
|
[man "konq"]
|
||||||
|
cmd = A_PATH_TO/konqueror
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Note about git config --global
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Note that all these configuration variables should probably be set
|
||||||
|
using the `--global` flag, for example like this:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git config --global help.format web
|
||||||
|
$ git config --global web.browser firefox
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
as they are probably more user specific than repository specific.
|
||||||
|
See linkgit:git-config[1] for more information about this.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
139
app/src/main/assets/manpages/git-history.txt
Normal file
139
app/src/main/assets/manpages/git-history.txt
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
git-history(1)
|
||||||
|
==============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-history - EXPERIMENTAL: Rewrite history
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git history reword <commit> [--dry-run] [--update-refs=(branches|head)]
|
||||||
|
git history split <commit> [--dry-run] [--update-refs=(branches|head)] [--] [<pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Rewrite history by rearranging or modifying specific commits in the
|
||||||
|
history.
|
||||||
|
|
||||||
|
THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
|
||||||
|
|
||||||
|
This command is related to linkgit:git-rebase[1] in that both commands can be
|
||||||
|
used to rewrite history. There are a couple of major differences though:
|
||||||
|
|
||||||
|
* linkgit:git-history[1] can work in a bare repository as it does not need to
|
||||||
|
touch either the index or the worktree.
|
||||||
|
* linkgit:git-history[1] does not execute any linkgit:githooks[5] at the
|
||||||
|
current point in time. This may change in the future.
|
||||||
|
* linkgit:git-history[1] by default updates all branches that are descendants
|
||||||
|
of the original commit to point to the rewritten commit.
|
||||||
|
|
||||||
|
Overall, linkgit:git-history[1] aims to provide a more opinionated way to modify
|
||||||
|
your commit history that is simpler to use compared to linkgit:git-rebase[1] in
|
||||||
|
general.
|
||||||
|
|
||||||
|
Use linkgit:git-rebase[1] if you want to reapply a range of commits onto a
|
||||||
|
different base, or interactive rebases if you want to edit a range of commits
|
||||||
|
at once.
|
||||||
|
|
||||||
|
LIMITATIONS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This command does not (yet) work with histories that contain merges. You
|
||||||
|
should use linkgit:git-rebase[1] with the `--rebase-merges` flag instead.
|
||||||
|
|
||||||
|
Furthermore, the command does not support operations that can result in merge
|
||||||
|
conflicts. This limitation is by design as history rewrites are not intended to
|
||||||
|
be stateful operations. The limitation can be lifted once (if) Git learns about
|
||||||
|
first-class conflicts.
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
--------
|
||||||
|
|
||||||
|
The following commands are available to rewrite history in different ways:
|
||||||
|
|
||||||
|
`reword <commit>`::
|
||||||
|
Rewrite the commit message of the specified commit. All the other
|
||||||
|
details of this commit remain unchanged. This command will spawn an
|
||||||
|
editor with the current message of that commit.
|
||||||
|
|
||||||
|
`split <commit> [--] [<pathspec>...]`::
|
||||||
|
Interactively split up <commit> into two commits by choosing
|
||||||
|
hunks introduced by it that will be moved into the new split-out
|
||||||
|
commit. These hunks will then be written into a new commit that
|
||||||
|
becomes the parent of the previous commit. The original commit
|
||||||
|
stays intact, except that its parent will be the newly split-out
|
||||||
|
commit.
|
||||||
|
+
|
||||||
|
The commit messages of the split-up commits will be asked for by launching
|
||||||
|
the configured editor. Authorship of the commit will be the same as for the
|
||||||
|
original commit.
|
||||||
|
+
|
||||||
|
If passed, _<pathspec>_ can be used to limit which changes shall be split out
|
||||||
|
of the original commit. Files not matching any of the pathspecs will remain
|
||||||
|
part of the original commit. For more details, see the 'pathspec' entry in
|
||||||
|
linkgit:gitglossary[7].
|
||||||
|
+
|
||||||
|
It is invalid to select either all or no hunks, as that would lead to
|
||||||
|
one of the commits becoming empty.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
`--dry-run`::
|
||||||
|
Do not update any references, but instead print any ref updates in a
|
||||||
|
format that can be consumed by linkgit:git-update-ref[1]. Necessary new
|
||||||
|
objects will be written into the repository, so applying these printed
|
||||||
|
ref updates is generally safe.
|
||||||
|
|
||||||
|
`--update-refs=(branches|head)`::
|
||||||
|
Control which references will be updated by the command, if any. With
|
||||||
|
`branches`, all local branches that point to commits which are
|
||||||
|
descendants of the original commit will be rewritten. With `head`, only
|
||||||
|
the current `HEAD` reference will be rewritten. Defaults to `branches`.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Split a commit
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
----------
|
||||||
|
$ git log --stat --oneline
|
||||||
|
3f81232 (HEAD -> main) original
|
||||||
|
bar | 1 +
|
||||||
|
foo | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
$ git history split HEAD
|
||||||
|
diff --git a/bar b/bar
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..5716ca5
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/bar
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+bar
|
||||||
|
(1/1) Stage addition [y,n,q,a,d,p,?]? y
|
||||||
|
|
||||||
|
diff --git a/foo b/foo
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..257cc56
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/foo
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+foo
|
||||||
|
(1/1) Stage addition [y,n,q,a,d,p,?]? n
|
||||||
|
|
||||||
|
$ git log --stat --oneline
|
||||||
|
7cebe64 (HEAD -> main) original
|
||||||
|
foo | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
d1582f3 split-out commit
|
||||||
|
bar | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
----------
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
196
app/src/main/assets/manpages/git-hook.txt
Normal file
196
app/src/main/assets/manpages/git-hook.txt
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
git-hook(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-hook - Run git hooks
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git hook' run [--allow-unknown-hook-name] [--ignore-missing] [--to-stdin=<path>] <hook-name> [-- <hook-args>]
|
||||||
|
'git hook' list [--allow-unknown-hook-name] [-z] [--show-scope] <hook-name>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
A command interface for running git hooks (see linkgit:githooks[5]),
|
||||||
|
for use by other scripted git commands.
|
||||||
|
|
||||||
|
This command parses the default configuration files for sets of configs like
|
||||||
|
so:
|
||||||
|
|
||||||
|
[hook "linter"]
|
||||||
|
event = pre-commit
|
||||||
|
command = ~/bin/linter --cpp20
|
||||||
|
|
||||||
|
In this example, `[hook "linter"]` represents one script - `~/bin/linter
|
||||||
|
--cpp20` - which can be shared by many repos, and even by many hook events, if
|
||||||
|
appropriate.
|
||||||
|
|
||||||
|
To add an unrelated hook which runs on a different event, for example a
|
||||||
|
spell-checker for your commit messages, you would write a configuration like so:
|
||||||
|
|
||||||
|
[hook "linter"]
|
||||||
|
event = pre-commit
|
||||||
|
command = ~/bin/linter --cpp20
|
||||||
|
[hook "spellcheck"]
|
||||||
|
event = commit-msg
|
||||||
|
command = ~/bin/spellchecker
|
||||||
|
|
||||||
|
With this config, when you run 'git commit', first `~/bin/linter --cpp20` will
|
||||||
|
have a chance to check your files to be committed (during the `pre-commit` hook
|
||||||
|
event`), and then `~/bin/spellchecker` will have a chance to check your commit
|
||||||
|
message (during the `commit-msg` hook event).
|
||||||
|
|
||||||
|
Commands are run in the order Git encounters their associated
|
||||||
|
`hook.<friendly-name>.event` configs during the configuration parse (see
|
||||||
|
linkgit:git-config[1]). Although multiple `hook.linter.event` configs can be
|
||||||
|
added, only one `hook.linter.command` event is valid - Git uses "last-one-wins"
|
||||||
|
to determine which command to run.
|
||||||
|
|
||||||
|
So if you wanted your linter to run when you commit as well as when you push,
|
||||||
|
you would configure it like so:
|
||||||
|
|
||||||
|
[hook "linter"]
|
||||||
|
event = pre-commit
|
||||||
|
event = pre-push
|
||||||
|
command = ~/bin/linter --cpp20
|
||||||
|
|
||||||
|
With this config, `~/bin/linter --cpp20` would be run by Git before a commit is
|
||||||
|
generated (during `pre-commit`) as well as before a push is performed (during
|
||||||
|
`pre-push`).
|
||||||
|
|
||||||
|
And if you wanted to run your linter as well as a secret-leak detector during
|
||||||
|
only the "pre-commit" hook event, you would configure it instead like so:
|
||||||
|
|
||||||
|
[hook "linter"]
|
||||||
|
event = pre-commit
|
||||||
|
command = ~/bin/linter --cpp20
|
||||||
|
[hook "no-leaks"]
|
||||||
|
event = pre-commit
|
||||||
|
command = ~/bin/leak-detector
|
||||||
|
|
||||||
|
With this config, before a commit is generated (during `pre-commit`), Git would
|
||||||
|
first start `~/bin/linter --cpp20` and second start `~/bin/leak-detector`. It
|
||||||
|
would evaluate the output of each when deciding whether to proceed with the
|
||||||
|
commit.
|
||||||
|
|
||||||
|
For a full list of hook events which you can set your `hook.<friendly-name>.event` to,
|
||||||
|
and how hooks are invoked during those events, see linkgit:githooks[5].
|
||||||
|
|
||||||
|
Git will ignore any `hook.<friendly-name>.event` that specifies an event it doesn't
|
||||||
|
recognize. This is intended so that tools which wrap Git can use the hook
|
||||||
|
infrastructure to run their own hooks; see "WRAPPERS" for more guidance.
|
||||||
|
|
||||||
|
In general, when instructions suggest adding a script to
|
||||||
|
`.git/hooks/<hook-event>`, you can specify it in the config instead by running:
|
||||||
|
|
||||||
|
----
|
||||||
|
git config set hook.<some-name>.command <path-to-script>
|
||||||
|
git config set --append hook.<some-name>.event <hook-event>
|
||||||
|
----
|
||||||
|
|
||||||
|
This way you can share the script between multiple repos. That is, `cp
|
||||||
|
~/my-script.sh ~/project/.git/hooks/pre-commit` would become:
|
||||||
|
|
||||||
|
----
|
||||||
|
git config set hook.my-script.command ~/my-script.sh
|
||||||
|
git config set --append hook.my-script.event pre-commit
|
||||||
|
----
|
||||||
|
|
||||||
|
SUBCOMMANDS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
run::
|
||||||
|
Runs hooks configured for `<hook-name>`, in the order they are
|
||||||
|
discovered during the config parse. The default `<hook-name>` from
|
||||||
|
the hookdir is run last. See linkgit:githooks[5] for supported
|
||||||
|
hook names.
|
||||||
|
+
|
||||||
|
|
||||||
|
Any positional arguments to the hook should be passed after a
|
||||||
|
mandatory `--` (or `--end-of-options`, see linkgit:gitcli[7]). See
|
||||||
|
linkgit:githooks[5] for arguments hooks might expect (if any).
|
||||||
|
|
||||||
|
list [-z] [--show-scope]::
|
||||||
|
Print a list of hooks which will be run on `<hook-name>` event. If no
|
||||||
|
hooks are configured for that event, print a warning and return 1.
|
||||||
|
Use `-z` to terminate output lines with NUL instead of newlines.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--allow-unknown-hook-name::
|
||||||
|
By default `git hook run` and `git hook list` will bail out when
|
||||||
|
`<hook-name>` is not a hook event known to Git (see linkgit:githooks[5]
|
||||||
|
for the list of known hooks). This is meant to help catch typos
|
||||||
|
such as `prereceive` when `pre-receive` was intended. Pass this
|
||||||
|
flag to allow unknown hook names.
|
||||||
|
|
||||||
|
--to-stdin::
|
||||||
|
For "run"; specify a file which will be streamed into the
|
||||||
|
hook's stdin. The hook will receive the entire file from
|
||||||
|
beginning to EOF.
|
||||||
|
|
||||||
|
--ignore-missing::
|
||||||
|
Ignore any missing hook by quietly returning zero. Used for
|
||||||
|
tools that want to do a blind one-shot run of a hook that may
|
||||||
|
or may not be present.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
Terminate "list" output lines with NUL instead of newlines.
|
||||||
|
|
||||||
|
--show-scope::
|
||||||
|
For "list"; prefix each configured hook's friendly name with a
|
||||||
|
tab-separated config scope (e.g. `local`, `global`, `system`),
|
||||||
|
mirroring the output style of `git config --show-scope`. Traditional
|
||||||
|
hooks from the hookdir are unaffected.
|
||||||
|
|
||||||
|
WRAPPERS
|
||||||
|
--------
|
||||||
|
|
||||||
|
`git hook run` has been designed to make it easy for tools which wrap Git to
|
||||||
|
configure and execute hooks using the Git hook infrastructure. It is possible to
|
||||||
|
provide arguments and stdin via the command line, as well as specifying parallel
|
||||||
|
or series execution if the user has provided multiple hooks.
|
||||||
|
|
||||||
|
Assuming your wrapper wants to support a hook named "mywrapper-start-tests", you
|
||||||
|
can have your users specify their hooks like so:
|
||||||
|
|
||||||
|
[hook "setup-test-dashboard"]
|
||||||
|
event = mywrapper-start-tests
|
||||||
|
command = ~/mywrapper/setup-dashboard.py --tap
|
||||||
|
|
||||||
|
Then, in your 'mywrapper' tool, you can invoke any users' configured hooks by
|
||||||
|
running:
|
||||||
|
|
||||||
|
----
|
||||||
|
git hook run --allow-unknown-hook-name mywrapper-start-tests \
|
||||||
|
# providing something to stdin
|
||||||
|
--stdin some-tempfile-123 \
|
||||||
|
# execute hooks in serial
|
||||||
|
# plus some arguments of your own...
|
||||||
|
-- \
|
||||||
|
--testname bar \
|
||||||
|
baz
|
||||||
|
----
|
||||||
|
|
||||||
|
Take care to name your wrapper's hook events in a way which is unlikely to
|
||||||
|
overlap with Git's native hooks (see linkgit:githooks[5]) - a hook event named
|
||||||
|
`mywrappertool-validate-commit` is much less likely to be added to native Git
|
||||||
|
than a hook event named `validate-commit`. If Git begins to use a hook event
|
||||||
|
named the same thing as your wrapper hook, it may invoke your users' hooks in
|
||||||
|
unintended and unsupported ways.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
include::config/hook.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:githooks[5]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
305
app/src/main/assets/manpages/git-http-backend.txt
Normal file
305
app/src/main/assets/manpages/git-http-backend.txt
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
git-http-backend(1)
|
||||||
|
===================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-http-backend - Server side implementation of Git over HTTP
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git http-backend'
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
A simple CGI program to serve the contents of a Git repository to Git
|
||||||
|
clients accessing the repository over http:// and https:// protocols.
|
||||||
|
The program supports clients fetching using both the smart HTTP protocol
|
||||||
|
and the backwards-compatible dumb HTTP protocol, as well as clients
|
||||||
|
pushing using the smart HTTP protocol. It also supports Git's
|
||||||
|
more-efficient "v2" protocol if properly configured; see the
|
||||||
|
discussion of `GIT_PROTOCOL` in the ENVIRONMENT section below.
|
||||||
|
|
||||||
|
It verifies that the directory has the magic file
|
||||||
|
"git-daemon-export-ok", and it will refuse to export any Git directory
|
||||||
|
that hasn't explicitly been marked for export this way (unless the
|
||||||
|
`GIT_HTTP_EXPORT_ALL` environment variable is set).
|
||||||
|
|
||||||
|
By default, only the `upload-pack` service is enabled, which serves
|
||||||
|
'git fetch-pack' and 'git ls-remote' clients, which are invoked from
|
||||||
|
'git fetch', 'git pull', and 'git clone'. If the client is authenticated,
|
||||||
|
the `receive-pack` service is enabled, which serves 'git send-pack'
|
||||||
|
clients, which is invoked from 'git push'.
|
||||||
|
|
||||||
|
SERVICES
|
||||||
|
--------
|
||||||
|
These services can be enabled/disabled using the per-repository
|
||||||
|
configuration file:
|
||||||
|
|
||||||
|
http.getanyfile::
|
||||||
|
This serves Git clients older than version 1.6.6 that are unable to use the
|
||||||
|
upload pack service. When enabled, clients are able to read
|
||||||
|
any file within the repository, including objects that are
|
||||||
|
no longer reachable from a branch but are still present.
|
||||||
|
It is enabled by default, but a repository can disable it
|
||||||
|
by setting this configuration value to `false`.
|
||||||
|
|
||||||
|
http.uploadpack::
|
||||||
|
This serves 'git fetch-pack' and 'git ls-remote' clients.
|
||||||
|
It is enabled by default, but a repository can disable it
|
||||||
|
by setting this configuration value to `false`.
|
||||||
|
|
||||||
|
http.receivepack::
|
||||||
|
This serves 'git send-pack' clients, allowing push. It is
|
||||||
|
disabled by default for anonymous users, and enabled by
|
||||||
|
default for users authenticated by the web server. It can be
|
||||||
|
disabled by setting this item to `false`, or enabled for all
|
||||||
|
users, including anonymous users, by setting it to `true`.
|
||||||
|
|
||||||
|
http.uploadarchive::
|
||||||
|
This serves 'git archive' clients for remote archive over HTTP/HTTPS
|
||||||
|
protocols. It is disabled by default. It only works in protocol v2.
|
||||||
|
|
||||||
|
URL TRANSLATION
|
||||||
|
---------------
|
||||||
|
To determine the location of the repository on disk, 'git http-backend'
|
||||||
|
concatenates the environment variables PATH_INFO, which is set
|
||||||
|
automatically by the web server, and GIT_PROJECT_ROOT, which must be set
|
||||||
|
manually in the web server configuration. If GIT_PROJECT_ROOT is not
|
||||||
|
set, 'git http-backend' reads PATH_TRANSLATED, which is also set
|
||||||
|
automatically by the web server.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
All of the following examples map `http://$hostname/git/foo/bar.git`
|
||||||
|
to `/var/www/git/foo/bar.git`.
|
||||||
|
|
||||||
|
Apache 2.x::
|
||||||
|
Ensure mod_cgi, mod_alias, and mod_env are enabled, set
|
||||||
|
GIT_PROJECT_ROOT (or DocumentRoot) appropriately, and
|
||||||
|
create a ScriptAlias to the CGI:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
SetEnv GIT_PROJECT_ROOT /var/www/git
|
||||||
|
SetEnv GIT_HTTP_EXPORT_ALL
|
||||||
|
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
|
||||||
|
|
||||||
|
# This is not strictly necessary using Apache and a modern version of
|
||||||
|
# git-http-backend, as the webserver will pass along the header in the
|
||||||
|
# environment as HTTP_GIT_PROTOCOL, and http-backend will copy that into
|
||||||
|
# GIT_PROTOCOL. But you may need this line (or something similar if you
|
||||||
|
# are using a different webserver), or if you want to support older Git
|
||||||
|
# versions that did not do that copying.
|
||||||
|
#
|
||||||
|
# Having the webserver set up GIT_PROTOCOL is perfectly fine even with
|
||||||
|
# modern versions (and will take precedence over HTTP_GIT_PROTOCOL,
|
||||||
|
# which means it can be used to override the client's request).
|
||||||
|
SetEnvIf Git-Protocol ".*" GIT_PROTOCOL=$0
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
To enable anonymous read access but authenticated write access,
|
||||||
|
require authorization for both the initial ref advertisement (which we
|
||||||
|
detect as a push via the service parameter in the query string), and the
|
||||||
|
receive-pack invocation itself:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
|
||||||
|
RewriteCond %{REQUEST_URI} /git-receive-pack$
|
||||||
|
RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
|
||||||
|
|
||||||
|
<LocationMatch "^/git/">
|
||||||
|
Order Deny,Allow
|
||||||
|
Deny from env=AUTHREQUIRED
|
||||||
|
|
||||||
|
AuthType Basic
|
||||||
|
AuthName "Git Access"
|
||||||
|
Require group committers
|
||||||
|
Satisfy Any
|
||||||
|
...
|
||||||
|
</LocationMatch>
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
If you do not have `mod_rewrite` available to match against the query
|
||||||
|
string, it is sufficient to just protect `git-receive-pack` itself,
|
||||||
|
like:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
<LocationMatch "^/git/.*/git-receive-pack$">
|
||||||
|
AuthType Basic
|
||||||
|
AuthName "Git Access"
|
||||||
|
Require group committers
|
||||||
|
...
|
||||||
|
</LocationMatch>
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
In this mode, the server will not request authentication until the
|
||||||
|
client actually starts the object negotiation phase of the push, rather
|
||||||
|
than during the initial contact. For this reason, you must also enable
|
||||||
|
the `http.receivepack` config option in any repositories that should
|
||||||
|
accept a push. The default behavior, if `http.receivepack` is not set,
|
||||||
|
is to reject any pushes by unauthenticated users; the initial request
|
||||||
|
will therefore report `403 Forbidden` to the client, without even giving
|
||||||
|
an opportunity for authentication.
|
||||||
|
+
|
||||||
|
To require authentication for both reads and writes, use a Location
|
||||||
|
directive around the repository, or one of its parent directories:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
<Location /git/private>
|
||||||
|
AuthType Basic
|
||||||
|
AuthName "Private Git Access"
|
||||||
|
Require group committers
|
||||||
|
...
|
||||||
|
</Location>
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
To serve gitweb at the same url, use a ScriptAliasMatch to only
|
||||||
|
those URLs that 'git http-backend' can handle, and forward the
|
||||||
|
rest to gitweb:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
ScriptAliasMatch \
|
||||||
|
"(?x)^/git/(.*/(HEAD | \
|
||||||
|
info/refs | \
|
||||||
|
objects/(info/[^/]+ | \
|
||||||
|
[0-9a-f]{2}/[0-9a-f]{38} | \
|
||||||
|
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
|
||||||
|
git-(upload|receive)-pack))$" \
|
||||||
|
/usr/libexec/git-core/git-http-backend/$1
|
||||||
|
|
||||||
|
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
To serve multiple repositories from different linkgit:gitnamespaces[7] in a
|
||||||
|
single repository:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1
|
||||||
|
ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Accelerated static Apache 2.x::
|
||||||
|
Similar to the above, but Apache can be used to return static
|
||||||
|
files that are stored on disk. On many systems this may
|
||||||
|
be more efficient as Apache can ask the kernel to copy the
|
||||||
|
file contents from the file system directly to the network:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
SetEnv GIT_PROJECT_ROOT /var/www/git
|
||||||
|
|
||||||
|
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
|
||||||
|
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
|
||||||
|
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
This can be combined with the gitweb configuration:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
SetEnv GIT_PROJECT_ROOT /var/www/git
|
||||||
|
|
||||||
|
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
|
||||||
|
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
|
||||||
|
ScriptAliasMatch \
|
||||||
|
"(?x)^/git/(.*/(HEAD | \
|
||||||
|
info/refs | \
|
||||||
|
objects/info/[^/]+ | \
|
||||||
|
git-(upload|receive)-pack))$" \
|
||||||
|
/usr/libexec/git-core/git-http-backend/$1
|
||||||
|
ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Lighttpd::
|
||||||
|
Ensure that `mod_cgi`, `mod_alias`, `mod_auth`, `mod_setenv` are
|
||||||
|
loaded, then set `GIT_PROJECT_ROOT` appropriately and redirect
|
||||||
|
all requests to the CGI:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend" )
|
||||||
|
$HTTP["url"] =~ "^/git" {
|
||||||
|
cgi.assign = ("" => "")
|
||||||
|
setenv.add-environment = (
|
||||||
|
"GIT_PROJECT_ROOT" => "/var/www/git",
|
||||||
|
"GIT_HTTP_EXPORT_ALL" => ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
To enable anonymous read access but authenticated write access:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
$HTTP["querystring"] =~ "service=git-receive-pack" {
|
||||||
|
include "git-auth.conf"
|
||||||
|
}
|
||||||
|
$HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
|
||||||
|
include "git-auth.conf"
|
||||||
|
}
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
where `git-auth.conf` looks something like:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
auth.require = (
|
||||||
|
"/" => (
|
||||||
|
"method" => "basic",
|
||||||
|
"realm" => "Git Access",
|
||||||
|
"require" => "valid-user"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# ...and set up auth.backend here
|
||||||
|
----------------------------------------------------------------
|
||||||
|
+
|
||||||
|
To require authentication for both reads and writes:
|
||||||
|
+
|
||||||
|
----------------------------------------------------------------
|
||||||
|
$HTTP["url"] =~ "^/git/private" {
|
||||||
|
include "git-auth.conf"
|
||||||
|
}
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
ENVIRONMENT
|
||||||
|
-----------
|
||||||
|
'git http-backend' relies upon the `CGI` environment variables set
|
||||||
|
by the invoking web server, including:
|
||||||
|
|
||||||
|
* PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED)
|
||||||
|
* REMOTE_USER
|
||||||
|
* REMOTE_ADDR
|
||||||
|
* CONTENT_TYPE
|
||||||
|
* QUERY_STRING
|
||||||
|
* REQUEST_METHOD
|
||||||
|
|
||||||
|
The `GIT_HTTP_EXPORT_ALL` environment variable may be passed to
|
||||||
|
'git-http-backend' to bypass the check for the "git-daemon-export-ok"
|
||||||
|
file in each repository before allowing export of that repository.
|
||||||
|
|
||||||
|
The `GIT_HTTP_MAX_REQUEST_BUFFER` environment variable (or the
|
||||||
|
`http.maxRequestBuffer` config option) may be set to change the
|
||||||
|
largest ref negotiation request that git will handle during a fetch; any
|
||||||
|
fetch requiring a larger buffer will not succeed. This value should not
|
||||||
|
normally need to be changed, but may be helpful if you are fetching from
|
||||||
|
a repository with an extremely large number of refs. The value can be
|
||||||
|
specified with a unit (e.g., `100M` for 100 megabytes). The default is
|
||||||
|
10 megabytes.
|
||||||
|
|
||||||
|
Clients may probe for optional protocol capabilities (like the v2
|
||||||
|
protocol) using the `Git-Protocol` HTTP header. In order to support
|
||||||
|
these, the contents of that header must appear in the `GIT_PROTOCOL`
|
||||||
|
environment variable. Most webservers will pass this header to the CGI
|
||||||
|
via the `HTTP_GIT_PROTOCOL` variable, and `git-http-backend` will
|
||||||
|
automatically copy that to `GIT_PROTOCOL`. However, some webservers may
|
||||||
|
be more selective about which headers they'll pass, in which case they
|
||||||
|
need to be configured explicitly (see the mention of `Git-Protocol` in
|
||||||
|
the Apache config from the earlier EXAMPLES section).
|
||||||
|
|
||||||
|
The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and
|
||||||
|
GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}',
|
||||||
|
ensuring that any reflogs created by 'git-receive-pack' contain some
|
||||||
|
identifying information of the remote user who performed the push.
|
||||||
|
|
||||||
|
All `CGI` environment variables are available to each of the hooks
|
||||||
|
invoked by the 'git-receive-pack'.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
65
app/src/main/assets/manpages/git-http-fetch.txt
Normal file
65
app/src/main/assets/manpages/git-http-fetch.txt
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
git-http-fetch(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-http-fetch - Download from a remote Git repository via HTTP
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git http-fetch' [-c] [-t] [-a] [-d] [-v] [-w <filename>] [--recover] [--stdin | --packfile=<hash> | <commit>] <URL>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Downloads a remote Git repository via HTTP.
|
||||||
|
|
||||||
|
This command always gets all objects. Historically, there were three options
|
||||||
|
`-a`, `-c` and `-t` for choosing which objects to download. They are now
|
||||||
|
silently ignored.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
commit-id::
|
||||||
|
Either the hash or the filename under [URL]/refs/ to
|
||||||
|
pull.
|
||||||
|
|
||||||
|
-a::
|
||||||
|
-c::
|
||||||
|
-t::
|
||||||
|
These options are ignored for historical reasons.
|
||||||
|
|
||||||
|
-v::
|
||||||
|
Report what is downloaded.
|
||||||
|
|
||||||
|
-w <filename>::
|
||||||
|
Writes the commit-id into the specified filename under $GIT_DIR/refs/<filename> on
|
||||||
|
the local end after the transfer is complete.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Instead of a commit id on the command line (which is not expected in this
|
||||||
|
case), 'git http-fetch' expects lines on stdin in the format
|
||||||
|
|
||||||
|
<commit-id>['\t'<filename-as-in--w>]
|
||||||
|
|
||||||
|
--packfile=<hash>::
|
||||||
|
For internal use only. Instead of a commit id on the command
|
||||||
|
line (which is not expected in
|
||||||
|
this case), 'git http-fetch' fetches the packfile directly at the given
|
||||||
|
URL and uses index-pack to generate corresponding .idx and .keep files.
|
||||||
|
The hash is used to determine the name of the temporary file and is
|
||||||
|
arbitrary. The output of index-pack is printed to stdout. Requires
|
||||||
|
--index-pack-args.
|
||||||
|
|
||||||
|
--index-pack-args=<args>::
|
||||||
|
For internal use only. The command to run on the contents of the
|
||||||
|
downloaded pack. Arguments are URL-encoded separated by spaces.
|
||||||
|
|
||||||
|
--recover::
|
||||||
|
Verify that everything reachable from target is fetched. Used after
|
||||||
|
an earlier fetch is interrupted.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
96
app/src/main/assets/manpages/git-http-push.txt
Normal file
96
app/src/main/assets/manpages/git-http-push.txt
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
git-http-push(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-http-push - Push objects over HTTP/DAV to another repository
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git http-push' [--all] [--dry-run] [--force] [--verbose] <URL> <ref> [<ref>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Sends missing objects to the remote repository, and updates the
|
||||||
|
remote branch.
|
||||||
|
|
||||||
|
*NOTE*: This command is temporarily disabled if your libcurl
|
||||||
|
is older than 7.16, as the combination has been reported
|
||||||
|
not to work and sometimes corrupts the repository.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--all::
|
||||||
|
Do not assume that the remote repository is complete in its
|
||||||
|
current state, and verify all objects in the entire local
|
||||||
|
ref's history exist in the remote repository.
|
||||||
|
|
||||||
|
--force::
|
||||||
|
Usually, the command refuses to update a remote ref that
|
||||||
|
is not an ancestor of the local ref used to overwrite it.
|
||||||
|
This flag disables the check. What this means is that
|
||||||
|
the remote repository can lose commits; use it with
|
||||||
|
care.
|
||||||
|
|
||||||
|
--dry-run::
|
||||||
|
Do everything except actually send the updates.
|
||||||
|
|
||||||
|
--verbose::
|
||||||
|
Report the list of objects being walked locally and the
|
||||||
|
list of objects successfully sent to the remote repository.
|
||||||
|
|
||||||
|
-d::
|
||||||
|
-D::
|
||||||
|
Remove <ref> from remote repository. The specified branch
|
||||||
|
cannot be the remote HEAD. If -d is specified, the following
|
||||||
|
other conditions must also be met:
|
||||||
|
|
||||||
|
- Remote HEAD must resolve to an object that exists locally
|
||||||
|
- Specified branch resolves to an object that exists locally
|
||||||
|
- Specified branch is an ancestor of the remote HEAD
|
||||||
|
|
||||||
|
<ref>...::
|
||||||
|
The remote refs to update.
|
||||||
|
|
||||||
|
|
||||||
|
SPECIFYING THE REFS
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
A '<ref>' specification can be either a single pattern, or a pair
|
||||||
|
of such patterns separated by a colon ":" (this means that a ref name
|
||||||
|
cannot have a colon in it). A single pattern '<name>' is just a
|
||||||
|
shorthand for '<name>:<name>'.
|
||||||
|
|
||||||
|
Each pattern pair '<src>:<dst>' consists of the source side (before
|
||||||
|
the colon) and the destination side (after the colon). The ref to be
|
||||||
|
pushed is determined by finding a match that matches the source side,
|
||||||
|
and where it is pushed is determined by using the destination side.
|
||||||
|
|
||||||
|
- It is an error if '<src>' does not match exactly one of the
|
||||||
|
local refs.
|
||||||
|
|
||||||
|
- If '<dst>' does not match any remote ref, either
|
||||||
|
|
||||||
|
* it has to start with "refs/"; <dst> is used as the
|
||||||
|
destination literally in this case.
|
||||||
|
|
||||||
|
* <src> == <dst> and the ref that matched the <src> must not
|
||||||
|
exist in the set of remote refs; the ref matched <src>
|
||||||
|
locally is used as the name of the destination.
|
||||||
|
|
||||||
|
Without `--force`, the <src> ref is stored at the remote only if
|
||||||
|
<dst> does not exist, or <dst> is a proper subset (i.e. an
|
||||||
|
ancestor) of <src>. This check, known as "fast-forward check",
|
||||||
|
is performed to avoid accidentally overwriting the
|
||||||
|
remote ref and losing other peoples' commits from there.
|
||||||
|
|
||||||
|
With `--force`, the fast-forward check is disabled for all refs.
|
||||||
|
|
||||||
|
Optionally, a <ref> parameter can be prefixed with a plus '+' sign
|
||||||
|
to disable the fast-forward check only on that ref.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
224
app/src/main/assets/manpages/git-imap-send.txt
Normal file
224
app/src/main/assets/manpages/git-imap-send.txt
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
git-imap-send(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-imap-send - Send a collection of patches from stdin to an IMAP folder
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git imap-send' [-v] [-q] [--[no-]curl] [(--folder|-f) <folder>]
|
||||||
|
'git imap-send' --list
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This command uploads a mailbox generated with `git format-patch`
|
||||||
|
into an IMAP drafts folder. This allows patches to be sent as
|
||||||
|
other email is when using mail clients that cannot read mailbox
|
||||||
|
files directly. The command also works with any general mailbox
|
||||||
|
in which emails have the fields `From`, `Date`, and `Subject` in
|
||||||
|
that order.
|
||||||
|
|
||||||
|
Typical usage is something like:
|
||||||
|
|
||||||
|
------
|
||||||
|
$ git format-patch --signoff --stdout --attach origin | git imap-send
|
||||||
|
------
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
-v::
|
||||||
|
--verbose::
|
||||||
|
Be verbose.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Be quiet.
|
||||||
|
|
||||||
|
-f <folder>::
|
||||||
|
--folder=<folder>::
|
||||||
|
Specify the folder in which the emails have to saved.
|
||||||
|
For example: `--folder=[Gmail]/Drafts` or `-f INBOX/Drafts`.
|
||||||
|
|
||||||
|
--curl::
|
||||||
|
Use libcurl to communicate with the IMAP server, unless tunneling
|
||||||
|
into it. Ignored if Git was built without the USE_CURL_FOR_IMAP_SEND
|
||||||
|
option set.
|
||||||
|
|
||||||
|
--no-curl::
|
||||||
|
Talk to the IMAP server using git's own IMAP routines instead of
|
||||||
|
using libcurl. Ignored if Git was built with the NO_OPENSSL option
|
||||||
|
set.
|
||||||
|
|
||||||
|
--list::
|
||||||
|
Run the IMAP LIST command to output a list of all the folders present.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
To use the tool, `imap.folder` and either `imap.tunnel` or `imap.host` must be set
|
||||||
|
to appropriate values.
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-rest.adoc[]
|
||||||
|
|
||||||
|
include::config/imap.adoc[]
|
||||||
|
|
||||||
|
GETTING A LIST OF AVAILABLE FOLDERS
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
In order to send an email to a specific folder, you need to know the correct name of
|
||||||
|
intended folder in your mailbox. The names like "Junk", "Trash" etc. displayed by
|
||||||
|
various email clients need not be the actual names of the folders stored in the mail
|
||||||
|
server of your email provider.
|
||||||
|
|
||||||
|
In order to get the correct folder name to be used with `git imap-send`, you can run
|
||||||
|
`git imap-send --list`. This will display a list of valid folder names. An example
|
||||||
|
of such an output when run on a Gmail account is:
|
||||||
|
|
||||||
|
.........................
|
||||||
|
* LIST (\HasNoChildren) "/" "INBOX"
|
||||||
|
* LIST (\HasChildren \Noselect) "/" "[Gmail]"
|
||||||
|
* LIST (\All \HasNoChildren) "/" "[Gmail]/All Mail"
|
||||||
|
* LIST (\Drafts \HasNoChildren) "/" "[Gmail]/Drafts"
|
||||||
|
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
|
||||||
|
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
|
||||||
|
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
|
||||||
|
* LIST (\Flagged \HasNoChildren) "/" "[Gmail]/Starred"
|
||||||
|
* LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"
|
||||||
|
.........................
|
||||||
|
|
||||||
|
Here, you can observe that the correct name for the "Junk" folder is `[Gmail]/Spam`
|
||||||
|
and for the "Trash" folder is `[Gmail]/Trash`. Similar logic can be used to determine
|
||||||
|
other folders as well.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
Using tunnel mode:
|
||||||
|
|
||||||
|
..........................
|
||||||
|
[imap]
|
||||||
|
folder = "INBOX.Drafts"
|
||||||
|
tunnel = "ssh -q -C user@example.com /usr/bin/imapd ./Maildir 2> /dev/null"
|
||||||
|
..........................
|
||||||
|
|
||||||
|
Using direct mode:
|
||||||
|
|
||||||
|
.........................
|
||||||
|
[imap]
|
||||||
|
folder = "INBOX.Drafts"
|
||||||
|
host = imap://imap.example.com
|
||||||
|
user = bob
|
||||||
|
pass = p4ssw0rd
|
||||||
|
.........................
|
||||||
|
|
||||||
|
Using direct mode with SSL:
|
||||||
|
|
||||||
|
.........................
|
||||||
|
[imap]
|
||||||
|
folder = "INBOX.Drafts"
|
||||||
|
host = imaps://imap.example.com
|
||||||
|
user = bob
|
||||||
|
pass = p4ssw0rd
|
||||||
|
port = 123
|
||||||
|
; sslVerify = false
|
||||||
|
.........................
|
||||||
|
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
You may want to use `sslVerify=false`
|
||||||
|
while troubleshooting, if you suspect that the reason you are
|
||||||
|
having trouble connecting is because the certificate you use at
|
||||||
|
the private server `example.com` you are trying to set up (or
|
||||||
|
have set up) may not be verified correctly.
|
||||||
|
|
||||||
|
Using Gmail's IMAP interface:
|
||||||
|
|
||||||
|
---------
|
||||||
|
[imap]
|
||||||
|
folder = "[Gmail]/Drafts"
|
||||||
|
host = imaps://imap.gmail.com
|
||||||
|
user = user@gmail.com
|
||||||
|
port = 993
|
||||||
|
---------
|
||||||
|
|
||||||
|
Gmail does not allow using your regular password for `git imap-send`.
|
||||||
|
If you have multi-factor authentication set up on your Gmail account, you
|
||||||
|
can generate an app-specific password for use with `git imap-send`.
|
||||||
|
Visit https://security.google.com/settings/security/apppasswords to create
|
||||||
|
it. Alternatively, use OAuth2.0 authentication as described below.
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
You might need to instead use: `folder = "[Google Mail]/Drafts"` if you get an error
|
||||||
|
that the "Folder doesn't exist". You can also run `git imap-send --list` to get a
|
||||||
|
list of available folders.
|
||||||
|
|
||||||
|
[NOTE]
|
||||||
|
If your Gmail account is set to another language than English, the name of the "Drafts"
|
||||||
|
folder will be localized.
|
||||||
|
|
||||||
|
If you want to use OAuth2.0 based authentication, you can specify
|
||||||
|
`OAUTHBEARER` or `XOAUTH2` mechanism in your config. It is more secure
|
||||||
|
than using app-specific passwords, and also does not enforce the need of
|
||||||
|
having multi-factor authentication. You will have to use an OAuth2.0
|
||||||
|
access token in place of your password when using this authentication.
|
||||||
|
|
||||||
|
---------
|
||||||
|
[imap]
|
||||||
|
folder = "[Gmail]/Drafts"
|
||||||
|
host = imaps://imap.gmail.com
|
||||||
|
user = user@gmail.com
|
||||||
|
port = 993
|
||||||
|
authmethod = OAUTHBEARER
|
||||||
|
---------
|
||||||
|
|
||||||
|
Using Outlook's IMAP interface:
|
||||||
|
|
||||||
|
Unlike Gmail, Outlook only supports OAuth2.0 based authentication. Also, it
|
||||||
|
supports only `XOAUTH2` as the mechanism.
|
||||||
|
|
||||||
|
---------
|
||||||
|
[imap]
|
||||||
|
folder = "Drafts"
|
||||||
|
host = imaps://outlook.office365.com
|
||||||
|
user = user@outlook.com
|
||||||
|
port = 993
|
||||||
|
authmethod = XOAUTH2
|
||||||
|
---------
|
||||||
|
|
||||||
|
Once the commits are ready to be sent, run the following command:
|
||||||
|
|
||||||
|
$ git format-patch --cover-letter -M --stdout origin/master | git imap-send
|
||||||
|
|
||||||
|
Just make sure to disable line wrapping in the email client (Gmail's web
|
||||||
|
interface will wrap lines no matter what, so you need to use a real
|
||||||
|
IMAP client).
|
||||||
|
|
||||||
|
In case you are using OAuth2.0 authentication, it is easier to use credential
|
||||||
|
helpers to generate tokens. Credential helpers suggested in
|
||||||
|
linkgit:git-send-email[1] can be used for `git imap-send` as well.
|
||||||
|
|
||||||
|
CAUTION
|
||||||
|
-------
|
||||||
|
It is still your responsibility to make sure that the email message
|
||||||
|
sent by your email program meets the standards of your project.
|
||||||
|
Many projects do not like patches to be attached. Some mail
|
||||||
|
agents will transform patches (e.g. wrap lines, send them as
|
||||||
|
format=flowed) in ways that make them fail. You will get angry
|
||||||
|
flames ridiculing you if you don't check this.
|
||||||
|
|
||||||
|
Thunderbird in particular is known to be problematic. Thunderbird
|
||||||
|
users may wish to visit this web page for more information:
|
||||||
|
https://kb.mozillazine.org/Plain_text_e-mail_-_Thunderbird#Completely_plain_email
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-format-patch[1], linkgit:git-send-email[1], mbox(5)
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
163
app/src/main/assets/manpages/git-index-pack.txt
Normal file
163
app/src/main/assets/manpages/git-index-pack.txt
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
git-index-pack(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-index-pack - Build pack index file for an existing packed archive
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git index-pack' [-v] [-o <index-file>] [--[no-]rev-index] <pack-file>
|
||||||
|
'git index-pack' --stdin [--fix-thin] [--keep] [-v] [-o <index-file>]
|
||||||
|
[--[no-]rev-index] [<pack-file>]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Reads a packed archive (.pack) from the specified file,
|
||||||
|
builds a pack index file (.idx) for it, and optionally writes a
|
||||||
|
reverse-index (.rev) for the specified pack. The packed
|
||||||
|
archive, together with the pack index, can then be placed in
|
||||||
|
the objects/pack/ directory of a Git repository.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-v::
|
||||||
|
Be verbose about what is going on, including progress status.
|
||||||
|
|
||||||
|
-o <index-file>::
|
||||||
|
Write the generated pack index into the specified
|
||||||
|
file. Without this option the name of pack index
|
||||||
|
file is constructed from the name of packed archive
|
||||||
|
file by replacing .pack with .idx (and the program
|
||||||
|
fails if the name of packed archive does not end
|
||||||
|
with .pack).
|
||||||
|
|
||||||
|
--rev-index::
|
||||||
|
--no-rev-index::
|
||||||
|
When this flag is provided, generate a reverse index
|
||||||
|
(a `.rev` file) corresponding to the given pack. If
|
||||||
|
`--verify` is given, ensure that the existing
|
||||||
|
reverse index is correct. Takes precedence over
|
||||||
|
`pack.writeReverseIndex`.
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
When this flag is provided, the pack is read from stdin
|
||||||
|
instead and a copy is then written to <pack-file>. If
|
||||||
|
<pack-file> is not specified, the pack is written to
|
||||||
|
objects/pack/ directory of the current Git repository with
|
||||||
|
a default name determined from the pack content. If
|
||||||
|
<pack-file> is not specified consider using --keep to
|
||||||
|
prevent a race condition between this process and
|
||||||
|
'git repack'.
|
||||||
|
|
||||||
|
--fix-thin::
|
||||||
|
Fix a "thin" pack produced by `git pack-objects --thin` (see
|
||||||
|
linkgit:git-pack-objects[1] for details) by adding the
|
||||||
|
excluded objects the deltified objects are based on to the
|
||||||
|
pack. This option only makes sense in conjunction with --stdin.
|
||||||
|
|
||||||
|
--keep::
|
||||||
|
Before moving the index into its final destination
|
||||||
|
create an empty .keep file for the associated pack file.
|
||||||
|
This option is usually necessary with --stdin to prevent a
|
||||||
|
simultaneous 'git repack' process from deleting
|
||||||
|
the newly constructed pack and index before refs can be
|
||||||
|
updated to use objects contained in the pack.
|
||||||
|
|
||||||
|
--keep=<msg>::
|
||||||
|
Like --keep, create a .keep file before moving the index into
|
||||||
|
its final destination. However, instead of creating an empty file
|
||||||
|
place '<msg>' followed by an LF into the .keep file. The '<msg>'
|
||||||
|
message can later be searched for within all .keep files to
|
||||||
|
locate any which have outlived their usefulness.
|
||||||
|
|
||||||
|
--index-version=<version>[,<offset>]::
|
||||||
|
This is intended to be used by the test suite only. It allows
|
||||||
|
to force the version for the generated pack index, and to force
|
||||||
|
64-bit index entries on objects located above the given offset.
|
||||||
|
|
||||||
|
--strict[=<msg-id>=<severity>...]::
|
||||||
|
Die, if the pack contains broken objects or links. An optional
|
||||||
|
comma-separated list of `<msg-id>=<severity>` can be passed to change
|
||||||
|
the severity of some possible issues, e.g.,
|
||||||
|
`--strict="missingEmail=ignore,badTagName=error"`. See the entry for the
|
||||||
|
`fsck.<msg-id>` configuration options in linkgit:git-fsck[1] for more
|
||||||
|
information on the possible values of `<msg-id>` and `<severity>`.
|
||||||
|
|
||||||
|
--progress-title::
|
||||||
|
For internal use only.
|
||||||
|
+
|
||||||
|
Set the title of the progress bar. The title is "Receiving objects" by
|
||||||
|
default and "Indexing objects" when `--stdin` is specified.
|
||||||
|
|
||||||
|
--check-self-contained-and-connected::
|
||||||
|
Die if the pack contains broken links. For internal use only.
|
||||||
|
|
||||||
|
--fsck-objects[=<msg-id>=<severity>...]::
|
||||||
|
Die if the pack contains broken objects, but unlike `--strict`, don't
|
||||||
|
choke on broken links. If the pack contains a tree pointing to a
|
||||||
|
.gitmodules blob that does not exist, prints the hash of that blob
|
||||||
|
(for the caller to check) after the hash that goes into the name of the
|
||||||
|
pack/idx file (see "Notes").
|
||||||
|
+
|
||||||
|
An optional comma-separated list of `<msg-id>=<severity>` can be passed to
|
||||||
|
change the severity of some possible issues, e.g.,
|
||||||
|
`--fsck-objects="missingEmail=ignore,badTagName=ignore"`. See the entry for the
|
||||||
|
`fsck.<msg-id>` configuration options in linkgit:git-fsck[1] for more
|
||||||
|
information on the possible values of `<msg-id>` and `<severity>`.
|
||||||
|
|
||||||
|
--threads=<n>::
|
||||||
|
Specifies the number of threads to spawn when resolving
|
||||||
|
deltas. This requires that index-pack be compiled with
|
||||||
|
pthreads otherwise this option is ignored with a warning.
|
||||||
|
This is meant to reduce packing time on multiprocessor
|
||||||
|
machines. The required amount of memory for the delta search
|
||||||
|
window is however multiplied by the number of threads.
|
||||||
|
Specifying 0 will cause Git to auto-detect the number of CPU's
|
||||||
|
and use maximum 3 threads.
|
||||||
|
|
||||||
|
--max-input-size=<size>::
|
||||||
|
Die, if the pack is larger than <size>.
|
||||||
|
|
||||||
|
--object-format=<hash-algorithm>::
|
||||||
|
Specify the given object format (hash algorithm) for the pack. The valid
|
||||||
|
values are 'sha1' and (if enabled) 'sha256'. The default is the algorithm for
|
||||||
|
the current repository (set by `extensions.objectFormat`), or 'sha1' if no
|
||||||
|
value is set or outside a repository.
|
||||||
|
+
|
||||||
|
This option cannot be used with --stdin.
|
||||||
|
+
|
||||||
|
include::object-format-disclaimer.adoc[]
|
||||||
|
|
||||||
|
--promisor[=<message>]::
|
||||||
|
Before committing the pack-index, create a .promisor file for this
|
||||||
|
pack. Particularly helpful when writing a promisor pack with --fix-thin
|
||||||
|
since the name of the pack is not final until the pack has been fully
|
||||||
|
written. If a `<message>` is provided, then that content will be
|
||||||
|
written to the .promisor file for future reference. See
|
||||||
|
link:technical/partial-clone.html[partial clone] for more information.
|
||||||
|
+
|
||||||
|
Also, if there are objects in the given pack that references non-promisor
|
||||||
|
objects (in the repo), repacks those non-promisor objects into a promisor
|
||||||
|
pack. This avoids a situation in which a repo has non-promisor objects that are
|
||||||
|
accessible through promisor objects.
|
||||||
|
+
|
||||||
|
Requires <pack-file> to not be specified.
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
-----
|
||||||
|
|
||||||
|
Once the index has been created, the hash that goes into the name of
|
||||||
|
the pack/idx file is printed to stdout. If --stdin was
|
||||||
|
also used then this is prefixed by either "pack\t", or "keep\t" if a
|
||||||
|
new .keep file was successfully created. This is useful to remove a
|
||||||
|
.keep file used as a lock to prevent the race with 'git repack'
|
||||||
|
mentioned above.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
23
app/src/main/assets/manpages/git-init-db.txt
Normal file
23
app/src/main/assets/manpages/git-init-db.txt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
git-init-db(1)
|
||||||
|
==============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-init-db - Creates an empty Git repository
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git init-db' [-q | --quiet] [--bare] [--template=<template-directory>] [--separate-git-dir <git-dir>] [--shared[=<permissions>]]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This is a synonym for linkgit:git-init[1]. Please refer to the
|
||||||
|
documentation of that command.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
195
app/src/main/assets/manpages/git-init.txt
Normal file
195
app/src/main/assets/manpages/git-init.txt
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
git-init(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-init - Create an empty Git repository or reinitialize an existing one
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git init [-q | --quiet] [--bare] [--template=<template-directory>]
|
||||||
|
[--separate-git-dir <git-dir>] [--object-format=<format>]
|
||||||
|
[--ref-format=<format>]
|
||||||
|
[-b <branch-name> | --initial-branch=<branch-name>]
|
||||||
|
[--shared[=<permissions>]] [<directory>]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This command creates an empty Git repository - basically a `.git`
|
||||||
|
directory with subdirectories for `objects`, `refs/heads`,
|
||||||
|
`refs/tags`, and template files. An initial branch without any
|
||||||
|
commits will be created (see the `--initial-branch` option below
|
||||||
|
for its name).
|
||||||
|
|
||||||
|
If the `GIT_DIR` environment variable is set then it specifies a path
|
||||||
|
to use instead of `./.git` for the base of the repository.
|
||||||
|
|
||||||
|
If the object storage directory is specified via the
|
||||||
|
`GIT_OBJECT_DIRECTORY` environment variable then the sha1 directories
|
||||||
|
are created underneath; otherwise, the default `$GIT_DIR/objects`
|
||||||
|
directory is used.
|
||||||
|
|
||||||
|
Running `git init` in an existing repository is safe. It will not
|
||||||
|
overwrite things that are already there. The primary reason for
|
||||||
|
rerunning `git init` is to pick up newly added templates (or to move
|
||||||
|
the repository to another place if `--separate-git-dir` is given).
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
`-q`::
|
||||||
|
`--quiet`::
|
||||||
|
|
||||||
|
Only print error and warning messages; all other output will be suppressed.
|
||||||
|
|
||||||
|
`--bare`::
|
||||||
|
|
||||||
|
Create a bare repository. If `GIT_DIR` environment is not set, it is set to the
|
||||||
|
current working directory.
|
||||||
|
|
||||||
|
`--object-format=<format>`::
|
||||||
|
Specify the given object _<format>_ (hash algorithm) for the repository. The valid
|
||||||
|
values are `sha1` and (if enabled) `sha256`. `sha1` is the default.
|
||||||
|
+
|
||||||
|
include::object-format-disclaimer.adoc[]
|
||||||
|
|
||||||
|
`--ref-format=<format>`::
|
||||||
|
Specify the given ref storage _<format>_ for the repository. The valid values are:
|
||||||
|
+
|
||||||
|
include::ref-storage-format.adoc[]
|
||||||
|
|
||||||
|
`--template=<template-directory>`::
|
||||||
|
Specify the directory from which templates will be used. (See the "TEMPLATE
|
||||||
|
DIRECTORY" section below.)
|
||||||
|
|
||||||
|
`--separate-git-dir=<git-dir>`::
|
||||||
|
Instead of initializing the repository as a directory to either `$GIT_DIR` or
|
||||||
|
`./.git/`, create a text file there containing the path to the actual
|
||||||
|
repository. This file acts as a filesystem-agnostic Git symbolic link to the
|
||||||
|
repository.
|
||||||
|
+
|
||||||
|
If this is a reinitialization, the repository will be moved to the specified path.
|
||||||
|
|
||||||
|
`-b <branch-name>`::
|
||||||
|
`--initial-branch=<branch-name>`::
|
||||||
|
Use _<branch-name>_ for the initial branch in the newly created
|
||||||
|
repository. If not specified, fall back to the default name
|
||||||
|
ifndef::with-breaking-changes[]
|
||||||
|
(currently `master`, but this will change to `main` when Git 3.0 is released).
|
||||||
|
endif::with-breaking-changes[]
|
||||||
|
ifdef::with-breaking-changes[]
|
||||||
|
`main`.
|
||||||
|
endif::with-breaking-changes[]
|
||||||
|
The default name can be customized via the `init.defaultBranch` configuration
|
||||||
|
variable.
|
||||||
|
|
||||||
|
`--shared[=(false|true|umask|group|all|world|everybody|<perm>)]`::
|
||||||
|
|
||||||
|
Specify that the Git repository is to be shared amongst several users. This
|
||||||
|
allows users belonging to the same group to push into that
|
||||||
|
repository. When specified, the config variable `core.sharedRepository` is
|
||||||
|
set so that files and directories under `$GIT_DIR` are created with the
|
||||||
|
requested permissions. When not specified, Git will use permissions reported
|
||||||
|
by `umask`(2).
|
||||||
|
+
|
||||||
|
The option can have the following values, defaulting to `group` if no value
|
||||||
|
is given:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
`umask`::
|
||||||
|
`false`::
|
||||||
|
|
||||||
|
Use permissions reported by `umask`(2). The default, when `--shared` is not
|
||||||
|
specified.
|
||||||
|
|
||||||
|
`group`::
|
||||||
|
`true`::
|
||||||
|
|
||||||
|
Make the repository group-writable, (and `g+sx`, since the git group may not be
|
||||||
|
the primary group of all users). This is used to loosen the permissions of an
|
||||||
|
otherwise safe `umask`(2) value. Note that the umask still applies to the other
|
||||||
|
permission bits (e.g. if umask is `0022`, using `group` will not remove read
|
||||||
|
privileges from other (non-group) users). See `0xxx` for how to exactly specify
|
||||||
|
the repository permissions.
|
||||||
|
|
||||||
|
`all`::
|
||||||
|
`world`::
|
||||||
|
`everybody`::
|
||||||
|
|
||||||
|
Same as `group`, but make the repository readable by all users.
|
||||||
|
|
||||||
|
_<perm>_::
|
||||||
|
|
||||||
|
_<perm>_ is a 3-digit octal number prefixed with `0` and each file
|
||||||
|
will have mode _<perm>_. _<perm>_ will override users' `umask`(2)
|
||||||
|
value (and not only loosen permissions as `group` and `all`
|
||||||
|
do). `0640` will create a repository which is group-readable, but
|
||||||
|
not group-writable or accessible to others. `0660` will create a repo
|
||||||
|
that is readable and writable to the current user and group, but
|
||||||
|
inaccessible to others (directories and executable files get their
|
||||||
|
`x` bit from the `r` bit for corresponding classes of users).
|
||||||
|
--
|
||||||
|
|
||||||
|
By default, the configuration flag `receive.denyNonFastForwards` is enabled
|
||||||
|
in shared repositories, so that you cannot force a non fast-forwarding push
|
||||||
|
into it.
|
||||||
|
|
||||||
|
If you provide a _<directory>_, the command is run inside it. If this directory
|
||||||
|
does not exist, it will be created.
|
||||||
|
|
||||||
|
TEMPLATE DIRECTORY
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Files and directories in the template directory whose name do not start with a
|
||||||
|
dot will be copied to the `$GIT_DIR` after it is created.
|
||||||
|
|
||||||
|
The template directory will be one of the following (in order):
|
||||||
|
|
||||||
|
- the argument given with the `--template` option;
|
||||||
|
|
||||||
|
- the contents of the `$GIT_TEMPLATE_DIR` environment variable;
|
||||||
|
|
||||||
|
- the `init.templateDir` configuration variable; or
|
||||||
|
|
||||||
|
- the default template directory: `/usr/share/git-core/templates`.
|
||||||
|
|
||||||
|
The default template directory includes some directory structure, suggested
|
||||||
|
"exclude patterns" (see linkgit:gitignore[5]), and sample hook files.
|
||||||
|
|
||||||
|
The sample hooks are all disabled by default. To enable one of the
|
||||||
|
sample hooks rename it by removing its `.sample` suffix.
|
||||||
|
|
||||||
|
See linkgit:githooks[5] for more general info on hook execution.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Start a new Git repository for an existing code base::
|
||||||
|
+
|
||||||
|
----------------
|
||||||
|
$ cd /path/to/my/codebase
|
||||||
|
$ git init <1>
|
||||||
|
$ git add . <2>
|
||||||
|
$ git commit <3>
|
||||||
|
----------------
|
||||||
|
+
|
||||||
|
<1> Create a `/path/to/my/codebase/.git` directory.
|
||||||
|
<2> Add all existing files to the index.
|
||||||
|
<3> Record the pristine state as the first commit in the history.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
:git-init:
|
||||||
|
|
||||||
|
include::config/init.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
94
app/src/main/assets/manpages/git-instaweb.txt
Normal file
94
app/src/main/assets/manpages/git-instaweb.txt
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
git-instaweb(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-instaweb - Instantly browse your working repository in gitweb
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git instaweb' [--local] [--httpd=<httpd>] [--port=<port>]
|
||||||
|
[--browser=<browser>]
|
||||||
|
'git instaweb' [--start] [--stop] [--restart]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
A simple script to set up `gitweb` and a web server for browsing the local
|
||||||
|
repository.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
-l::
|
||||||
|
--local::
|
||||||
|
Only bind the web server to the local IP (127.0.0.1).
|
||||||
|
|
||||||
|
-d::
|
||||||
|
--httpd::
|
||||||
|
The HTTP daemon command-line that will be executed.
|
||||||
|
Command-line options may be specified here, and the
|
||||||
|
configuration file will be added at the end of the command-line.
|
||||||
|
Currently apache2, lighttpd, mongoose, plackup, python and
|
||||||
|
webrick are supported.
|
||||||
|
(Default: lighttpd)
|
||||||
|
|
||||||
|
-m::
|
||||||
|
--module-path::
|
||||||
|
The module path (only needed if httpd is Apache).
|
||||||
|
(Default: /usr/lib/apache2/modules)
|
||||||
|
|
||||||
|
-p::
|
||||||
|
--port::
|
||||||
|
The port number to bind the httpd to. (Default: 1234)
|
||||||
|
|
||||||
|
-b::
|
||||||
|
--browser::
|
||||||
|
The web browser that should be used to view the gitweb
|
||||||
|
page. This will be passed to the 'git web{litdd}browse' helper
|
||||||
|
script along with the URL of the gitweb instance. See
|
||||||
|
linkgit:git-web{litdd}browse[1] for more information about this. If
|
||||||
|
the script fails, the URL will be printed to stdout.
|
||||||
|
|
||||||
|
start::
|
||||||
|
--start::
|
||||||
|
Start the httpd instance and exit. Regenerate configuration files
|
||||||
|
as necessary for spawning a new instance.
|
||||||
|
|
||||||
|
stop::
|
||||||
|
--stop::
|
||||||
|
Stop the httpd instance and exit. This does not generate
|
||||||
|
any of the configuration files for spawning a new instance,
|
||||||
|
nor does it close the browser.
|
||||||
|
|
||||||
|
restart::
|
||||||
|
--restart::
|
||||||
|
Restart the httpd instance and exit. Regenerate configuration files
|
||||||
|
as necessary for spawning a new instance.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
You may specify configuration in your .git/config
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
[instaweb]
|
||||||
|
local = true
|
||||||
|
httpd = apache2 -f
|
||||||
|
port = 4321
|
||||||
|
browser = konqueror
|
||||||
|
modulePath = /usr/lib/apache2/modules
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
If the configuration variable `instaweb.browser` is not set,
|
||||||
|
`web.browser` will be used instead if it is defined. See
|
||||||
|
linkgit:git-web{litdd}browse[1] for more information about this.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:gitweb[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
411
app/src/main/assets/manpages/git-interpret-trailers.txt
Normal file
411
app/src/main/assets/manpages/git-interpret-trailers.txt
Normal file
@@ -0,0 +1,411 @@
|
|||||||
|
git-interpret-trailers(1)
|
||||||
|
=========================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-interpret-trailers - Add or parse structured information in commit messages
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git interpret-trailers [--in-place] [--trim-empty]
|
||||||
|
[(--trailer (<key>|<key-alias>)[(=|:)<value>])...]
|
||||||
|
[--parse] [<file>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Add or parse _trailer_ lines that look similar to RFC 822 e-mail
|
||||||
|
headers, at the end of the otherwise free-form part of a commit
|
||||||
|
message. For example, in the following commit message
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
subject
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
|
||||||
|
Signed-off-by: Alice <alice@example.com>
|
||||||
|
Signed-off-by: Bob <bob@example.com>
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
the last two lines starting with `Signed-off-by` are trailers.
|
||||||
|
|
||||||
|
This command reads commit messages from either the
|
||||||
|
_<file>_ arguments or the standard input if no _<file>_ is specified.
|
||||||
|
If `--parse` is specified, the output consists of the parsed trailers
|
||||||
|
coming from the input, without influencing them with any command line
|
||||||
|
options or configuration variables.
|
||||||
|
|
||||||
|
Otherwise, this command applies `trailer.<key-alias>` configuration
|
||||||
|
variables (which could potentially add new trailers, as well as
|
||||||
|
reposition them), as well as any command line arguments that can
|
||||||
|
override configuration variables (such as `--trailer=...` which could
|
||||||
|
also add new trailers), to each input file. The result is emitted on the
|
||||||
|
standard output.
|
||||||
|
|
||||||
|
This command can also operate on the output of linkgit:git-format-patch[1],
|
||||||
|
which is more elaborate than a plain commit message. Namely, such output
|
||||||
|
includes a commit message (as above), a `---` divider line, and a patch part.
|
||||||
|
For these inputs, the divider and patch parts are not modified by
|
||||||
|
this command and are emitted as is on the output, unless
|
||||||
|
`--no-divider` is specified.
|
||||||
|
|
||||||
|
Some configuration variables control the way the `--trailer` arguments
|
||||||
|
are applied to each input and the way any existing trailer in
|
||||||
|
the input is changed. They also make it possible to
|
||||||
|
automatically add some trailers.
|
||||||
|
|
||||||
|
By default, a `<key>=<value>` or `<key>:<value>` argument given
|
||||||
|
using `--trailer` will be appended after the existing trailers only if
|
||||||
|
the last trailer has a different (_<key>_, _<value>_) pair (or if there
|
||||||
|
is no existing trailer). The _<key>_ and _<value>_ parts will be trimmed
|
||||||
|
to remove starting and trailing whitespace, and the resulting trimmed
|
||||||
|
_<key>_ and _<value>_ will appear in the output like this:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
key: value
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
This means that the trimmed _<key>_ and _<value>_ will be separated by
|
||||||
|
"`:`{nbsp}" (one colon followed by one space).
|
||||||
|
|
||||||
|
For convenience, a _<key-alias>_ can be configured to make using `--trailer`
|
||||||
|
shorter to type on the command line. This can be configured using the
|
||||||
|
`trailer.<key-alias>.key` configuration variable. The _<key-alias>_ must be a prefix
|
||||||
|
of the full _<key>_ string, although case sensitivity does not matter. For
|
||||||
|
example, if you have
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
trailer.sign.key "Signed-off-by: "
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
in your configuration, you only need to specify `--trailer="sign: foo"`
|
||||||
|
on the command line instead of `--trailer="Signed-off-by: foo"`.
|
||||||
|
|
||||||
|
By default the new trailer will appear at the end of all the existing
|
||||||
|
trailers. If there is no existing trailer, the new trailer will appear
|
||||||
|
at the end of the input. A blank line will be added before the new
|
||||||
|
trailer if there isn't one already.
|
||||||
|
|
||||||
|
Existing trailers are extracted from the input by looking for
|
||||||
|
a group of one or more lines that (i) is all trailers, or (ii) contains at
|
||||||
|
least one Git-generated or user-configured trailer and consists of at
|
||||||
|
least 25% trailers.
|
||||||
|
The group must be preceded by one or more empty (or whitespace-only) lines.
|
||||||
|
The group must either be at the end of the input or be the last
|
||||||
|
non-whitespace lines before a line that starts with `---` (followed by a
|
||||||
|
space or the end of the line).
|
||||||
|
|
||||||
|
When reading trailers, there can be no whitespace before or inside the
|
||||||
|
_<key>_, but any number of regular space and tab characters are allowed
|
||||||
|
between the _<key>_ and the separator. There can be whitespaces before,
|
||||||
|
inside or after the _<value>_. The _<value>_ may be split over multiple lines
|
||||||
|
with each subsequent line starting with at least one whitespace, like
|
||||||
|
the "folding" in RFC 822. Example:
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
key: This is a very long value, with spaces and
|
||||||
|
newlines in it.
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Note that trailers do not follow (nor are they intended to follow) many of the
|
||||||
|
rules for RFC 822 headers. For example they do not follow the encoding rule.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`--in-place`::
|
||||||
|
`--no-in-place`::
|
||||||
|
Edit the files in place. The default is `--no-in-place`.
|
||||||
|
|
||||||
|
`--trim-empty`::
|
||||||
|
`--no-trim-empty`::
|
||||||
|
If the _<value>_ part of any trailer contains only whitespace,
|
||||||
|
the whole trailer will be removed from the output.
|
||||||
|
This applies to existing trailers as well as new trailers.
|
||||||
|
+
|
||||||
|
The default is `--no-trim-empty`.
|
||||||
|
|
||||||
|
`--trailer=<key>[(=|:)<value>]`::
|
||||||
|
`--no-trailer`::
|
||||||
|
Specify a (_<key>_, _<value>_) pair that should be applied as a
|
||||||
|
trailer to the inputs. See the description of this command. Can
|
||||||
|
be given multiple times.
|
||||||
|
+
|
||||||
|
Use `--no-trailer` to reset the list.
|
||||||
|
|
||||||
|
`--where=<placement>`::
|
||||||
|
`--no-where`::
|
||||||
|
Specify where all new trailers will be added. A setting
|
||||||
|
provided with `--where` overrides the `trailer.where` and any
|
||||||
|
applicable `trailer.<key-alias>.where` configuration variables
|
||||||
|
and applies to all `--trailer` options until the next occurrence of
|
||||||
|
`--where` or `--no-where`. Possible placements are `after`,
|
||||||
|
`before`, `end` or `start`.
|
||||||
|
+
|
||||||
|
Use `--no-where` to clear the effect of any previous use of `--where`,
|
||||||
|
such that the relevant configuration variables are no longer overridden.
|
||||||
|
|
||||||
|
`--if-exists=<action>`::
|
||||||
|
`--no-if-exists`::
|
||||||
|
Specify what action will be performed when there is already at
|
||||||
|
least one trailer with the same _<key>_ in the input. A setting
|
||||||
|
provided with `--if-exists` overrides the `trailer.ifExists` and any
|
||||||
|
applicable `trailer.<key-alias>.ifExists` configuration variables
|
||||||
|
and applies to all `--trailer` options until the next occurrence of
|
||||||
|
`--if-exists` or `--no-if-exists`. Possible actions are `addIfDifferent`,
|
||||||
|
`addIfDifferentNeighbor`, `add`, `replace` and `doNothing`.
|
||||||
|
+
|
||||||
|
Use `--no-if-exists` to clear the effect of any previous use of
|
||||||
|
`--if-exists`, such that the relevant configuration variables are no
|
||||||
|
longer overridden.
|
||||||
|
|
||||||
|
`--if-missing=<action>`::
|
||||||
|
`--no-if-missing`::
|
||||||
|
Specify what action will be performed when there is no other
|
||||||
|
trailer with the same _<key>_ in the input. A setting
|
||||||
|
provided with `--if-missing` overrides the `trailer.ifMissing` and any
|
||||||
|
applicable `trailer.<key-alias>.ifMissing` configuration variables
|
||||||
|
and applies to all `--trailer` options until the next occurrence of
|
||||||
|
`--if-missing` or `--no-if-missing`. Possible actions are
|
||||||
|
`doNothing` or `add`.
|
||||||
|
+
|
||||||
|
Use `--no-if-missing` to clear the effect of any previous use of
|
||||||
|
`--if-missing`, such that the relevant configuration variables are no
|
||||||
|
longer overridden.
|
||||||
|
|
||||||
|
`--only-trailers`::
|
||||||
|
`--no-only-trailers`::
|
||||||
|
Output only the trailers, not any other parts of the
|
||||||
|
input. The default is `--no-only-trailers`.
|
||||||
|
|
||||||
|
`--only-input`::
|
||||||
|
`--no-only-input`::
|
||||||
|
Output only trailers that exist in the input; do not add any
|
||||||
|
from the command-line or by applying `trailer.<key-alias>` configuration
|
||||||
|
variables. The default is `--no-only-input`.
|
||||||
|
|
||||||
|
`--unfold`::
|
||||||
|
`--no-unfold`::
|
||||||
|
If a trailer has a value that runs over multiple lines (aka "folded"),
|
||||||
|
reformat the value into a single line. The default is `--no-unfold`.
|
||||||
|
|
||||||
|
`--parse`::
|
||||||
|
A convenience alias for `--only-trailers --only-input
|
||||||
|
--unfold`. This makes it easier to only see the trailers coming from the
|
||||||
|
input without influencing them with any command line options or
|
||||||
|
configuration variables, while also making the output machine-friendly with
|
||||||
|
`--unfold`.
|
||||||
|
+
|
||||||
|
There is no convenience alias to negate this alias.
|
||||||
|
|
||||||
|
`--divider`::
|
||||||
|
`--no-divider`::
|
||||||
|
Treat `---` as the end of the commit message. This is the default.
|
||||||
|
Use `--no-divider` when you know your input contains just the
|
||||||
|
commit message itself (and not an email or the output of
|
||||||
|
linkgit:git-format-patch[1]).
|
||||||
|
|
||||||
|
CONFIGURATION VARIABLES
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/trailer.adoc[]
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Configure a `sign` trailer with a `Signed-off-by` key, and then
|
||||||
|
add two of these trailers to a commit message file:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git config trailer.sign.key "Signed-off-by"
|
||||||
|
$ cat msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
$ git interpret-trailers --trailer 'sign: Alice <alice@example.com>' --trailer 'sign: Bob <bob@example.com>' <msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Signed-off-by: Alice <alice@example.com>
|
||||||
|
Signed-off-by: Bob <bob@example.com>
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Use the `--in-place` option to edit a commit message file in place:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Signed-off-by: Bob <bob@example.com>
|
||||||
|
$ git interpret-trailers --trailer 'Acked-by: Alice <alice@example.com>' --in-place msg.txt
|
||||||
|
$ cat msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Signed-off-by: Bob <bob@example.com>
|
||||||
|
Acked-by: Alice <alice@example.com>
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Extract the last commit as a patch, and add a `Cc` and a
|
||||||
|
`Reviewed-by` trailer to it:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git format-patch -1
|
||||||
|
0001-foo.patch
|
||||||
|
$ git interpret-trailers --trailer 'Cc: Alice <alice@example.com>' --trailer 'Reviewed-by: Bob <bob@example.com>' 0001-foo.patch >0001-bar.patch
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Configure a `sign` trailer with a command to automatically add a
|
||||||
|
"`Signed-off-by:`{nbsp}" with the author information only if there is no
|
||||||
|
"`Signed-off-by:`{nbsp}" already, and show how it works:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat msg1.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
$ git config trailer.sign.key "Signed-off-by: "
|
||||||
|
$ git config trailer.sign.ifmissing add
|
||||||
|
$ git config trailer.sign.ifexists doNothing
|
||||||
|
$ git config trailer.sign.cmd 'echo "$(git config user.name) <$(git config user.email)>"'
|
||||||
|
$ git interpret-trailers --trailer sign <msg1.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Signed-off-by: Bob <bob@example.com>
|
||||||
|
$ cat msg2.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Signed-off-by: Alice <alice@example.com>
|
||||||
|
$ git interpret-trailers --trailer sign <msg2.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Signed-off-by: Alice <alice@example.com>
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Configure a `fix` trailer with a key that contains a `#` and no
|
||||||
|
space after this character, and show how it works:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git config trailer.separators ":#"
|
||||||
|
$ git config trailer.fix.key "Fix #"
|
||||||
|
$ echo "subject" | git interpret-trailers --trailer fix=42
|
||||||
|
subject
|
||||||
|
|
||||||
|
Fix #42
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Configure a `help` trailer with a cmd use a script `glog-find-author`
|
||||||
|
which search specified author identity from git log in git repository
|
||||||
|
and show how it works:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat ~/bin/glog-find-author
|
||||||
|
#!/bin/sh
|
||||||
|
test -n "$1" && git log --author="$1" --pretty="%an <%ae>" -1 || true
|
||||||
|
$ cat msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
$ git config trailer.help.key "Helped-by: "
|
||||||
|
$ git config trailer.help.ifExists "addIfDifferentNeighbor"
|
||||||
|
$ git config trailer.help.cmd "~/bin/glog-find-author"
|
||||||
|
$ git interpret-trailers --trailer="help:Junio" --trailer="help:Couder" <msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Helped-by: Junio C Hamano <gitster@pobox.com>
|
||||||
|
Helped-by: Christian Couder <christian.couder@gmail.com>
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Configure a `ref` trailer with a cmd use a script `glog-grep`
|
||||||
|
to grep last relevant commit from git log in the git repository
|
||||||
|
and show how it works:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat ~/bin/glog-grep
|
||||||
|
#!/bin/sh
|
||||||
|
test -n "$1" && git log --grep "$1" --pretty=reference -1 || true
|
||||||
|
$ cat msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
$ git config trailer.ref.key "Reference-to: "
|
||||||
|
$ git config trailer.ref.ifExists "replace"
|
||||||
|
$ git config trailer.ref.cmd "~/bin/glog-grep"
|
||||||
|
$ git interpret-trailers --trailer="ref:Add copyright notices." <msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
Reference-to: 8bc9a0c769 (Add copyright notices., 2005-04-07)
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Configure a `see` trailer with a command to show the subject of a
|
||||||
|
commit that is related, and show how it works:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
see: HEAD~2
|
||||||
|
$ cat ~/bin/glog-ref
|
||||||
|
#!/bin/sh
|
||||||
|
git log -1 --oneline --format="%h (%s)" --abbrev-commit --abbrev=14
|
||||||
|
$ git config trailer.see.key "See-also: "
|
||||||
|
$ git config trailer.see.ifExists "replace"
|
||||||
|
$ git config trailer.see.ifMissing "doNothing"
|
||||||
|
$ git config trailer.see.cmd "glog-ref"
|
||||||
|
$ git interpret-trailers --trailer=see <msg.txt
|
||||||
|
subject
|
||||||
|
|
||||||
|
body text
|
||||||
|
|
||||||
|
See-also: fe3187489d69c4 (subject of related commit)
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Configure a commit template with some trailers with empty values
|
||||||
|
(using sed to show and keep the trailing spaces at the end of the
|
||||||
|
trailers), then configure a commit-msg hook that uses
|
||||||
|
git-interpret-trailers(1) to remove trailers with empty values and to
|
||||||
|
add a `git-version` trailer:
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ cat temp.txt
|
||||||
|
***subject***
|
||||||
|
|
||||||
|
***message***
|
||||||
|
|
||||||
|
Fixes: Z
|
||||||
|
Cc: Z
|
||||||
|
Reviewed-by: Z
|
||||||
|
Signed-off-by: Z
|
||||||
|
$ sed -e 's/ Z$/ /' temp.txt > commit_template.txt
|
||||||
|
$ git config commit.template commit_template.txt
|
||||||
|
$ cat .git/hooks/commit-msg
|
||||||
|
#!/bin/sh
|
||||||
|
git interpret-trailers --trim-empty --trailer "git-version: \$(git describe)" "\$1" > "\$1.new"
|
||||||
|
mv "\$1.new" "\$1"
|
||||||
|
$ chmod +x .git/hooks/commit-msg
|
||||||
|
------------
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-commit[1], linkgit:git-format-patch[1], linkgit:git-config[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
81
app/src/main/assets/manpages/git-last-modified.txt
Normal file
81
app/src/main/assets/manpages/git-last-modified.txt
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
git-last-modified(1)
|
||||||
|
====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-last-modified - EXPERIMENTAL: Show when files were last modified
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git last-modified [--recursive] [--show-trees] [--max-depth=<depth>] [-z]
|
||||||
|
[<revision-range>] [[--] <pathspec>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Shows which commit last modified each of the relevant files and subdirectories.
|
||||||
|
A commit renaming a path, or changing it's mode is also taken into account.
|
||||||
|
|
||||||
|
THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
`-r`::
|
||||||
|
`--recursive`::
|
||||||
|
Recursively traverse into all subtrees. By default, the command only
|
||||||
|
shows tree entries matching the `<pathspec>`. With this option, it
|
||||||
|
descends into subtrees and displays all entries within them.
|
||||||
|
Equivalent to `--max-depth=-1`.
|
||||||
|
|
||||||
|
`-t`::
|
||||||
|
`--show-trees`::
|
||||||
|
Show tree entries even when recursing into them.
|
||||||
|
|
||||||
|
`--max-depth=<depth>`::
|
||||||
|
For each pathspec given on the command line, traverse at most `<depth>`
|
||||||
|
levels into subtrees. A negative value means no limit.
|
||||||
|
The default is 0, which shows all paths matching the pathspec
|
||||||
|
without descending into subtrees.
|
||||||
|
|
||||||
|
`-z`::
|
||||||
|
Terminate each line with a _NUL_ character rather than a newline.
|
||||||
|
|
||||||
|
`<revision-range>`::
|
||||||
|
Only traverse commits in the specified revision range. When no
|
||||||
|
`<revision-range>` is specified, it defaults to `HEAD` (i.e. the whole
|
||||||
|
history leading to the current commit). For a complete list of ways to
|
||||||
|
spell `<revision-range>`, see the 'Specifying Ranges' section of
|
||||||
|
linkgit:gitrevisions[7].
|
||||||
|
|
||||||
|
`[--] <pathspec>...`::
|
||||||
|
Show the commit that last modified each path matching _<pathspec>_.
|
||||||
|
If no _<pathspec>_ is given, all files and subdirectories are included.
|
||||||
|
See linkgit:gitglossary[7] for details on pathspec syntax.
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
The output is in the format:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<oid> TAB <path> LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
If a path contains any special characters, the path is C-style quoted. To
|
||||||
|
avoid quoting, pass option `-z` to terminate each line with a NUL.
|
||||||
|
|
||||||
|
------------
|
||||||
|
<oid> TAB <path> NUL
|
||||||
|
------------
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-blame[1],
|
||||||
|
linkgit:git-log[1].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
228
app/src/main/assets/manpages/git-log.txt
Normal file
228
app/src/main/assets/manpages/git-log.txt
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
git-log(1)
|
||||||
|
==========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-log - Show commit logs
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git log [<options>] [<revision-range>] [[--] <path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Shows the commit logs.
|
||||||
|
|
||||||
|
:git-log: 1
|
||||||
|
include::rev-list-description.adoc[]
|
||||||
|
|
||||||
|
The command takes options applicable to the linkgit:git-rev-list[1]
|
||||||
|
command to control what is shown and how, and options applicable to
|
||||||
|
the linkgit:git-diff[1] command to control how the changes
|
||||||
|
each commit introduces are shown.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
`--follow`::
|
||||||
|
Continue listing the history of a file beyond renames
|
||||||
|
(works only for a single file).
|
||||||
|
|
||||||
|
`--no-decorate`::
|
||||||
|
`--decorate[=(short|full|auto|no)]`::
|
||||||
|
Print out the ref names of any commits that are shown. Possible values
|
||||||
|
are:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
`short`;; the ref name prefixes `refs/heads/`, `refs/tags/` and
|
||||||
|
`refs/remotes/` are not printed.
|
||||||
|
`full`;; the full ref name (including prefix) is printed.
|
||||||
|
`auto`:: if the output is going to a terminal, the ref names
|
||||||
|
are shown as if `short` were given, otherwise no ref names are
|
||||||
|
shown.
|
||||||
|
----
|
||||||
|
+
|
||||||
|
The option `--decorate` is short-hand for `--decorate=short`. Default to
|
||||||
|
configuration value of `log.decorate` if configured, otherwise, `auto`.
|
||||||
|
|
||||||
|
`--decorate-refs=<pattern>`::
|
||||||
|
`--decorate-refs-exclude=<pattern>`::
|
||||||
|
For each candidate reference, do not use it for decoration if it
|
||||||
|
matches any of the _<pattern>_ parameters given to
|
||||||
|
`--decorate-refs-exclude` or if it doesn't match any of the
|
||||||
|
_<pattern>_ parameters given to `--decorate-refs`.
|
||||||
|
The `log.excludeDecoration` config option allows excluding refs from
|
||||||
|
the decorations, but an explicit `--decorate-refs` pattern will
|
||||||
|
override a match in `log.excludeDecoration`.
|
||||||
|
+
|
||||||
|
If none of these options or config settings are given, then references are
|
||||||
|
used as decoration if they match `HEAD`, `refs/heads/`, `refs/remotes/`,
|
||||||
|
`refs/stash/`, or `refs/tags/`.
|
||||||
|
|
||||||
|
`--clear-decorations`::
|
||||||
|
When specified, this option clears all previous `--decorate-refs`
|
||||||
|
or `--decorate-refs-exclude` options and relaxes the default
|
||||||
|
decoration filter to include all references. This option is
|
||||||
|
assumed if the config value `log.initialDecorationSet` is set to
|
||||||
|
`all`.
|
||||||
|
|
||||||
|
`--source`::
|
||||||
|
Print out the ref name given on the command line by which each
|
||||||
|
commit was reached.
|
||||||
|
|
||||||
|
`--mailmap`::
|
||||||
|
`--no-mailmap`::
|
||||||
|
`--use-mailmap`::
|
||||||
|
`--no-use-mailmap`::
|
||||||
|
Use mailmap file to map author and committer names and email
|
||||||
|
addresses to canonical real names and email addresses. See
|
||||||
|
linkgit:git-shortlog[1].
|
||||||
|
|
||||||
|
`--full-diff`::
|
||||||
|
Without this flag, `git log -p <path>...` shows commits that
|
||||||
|
touch the specified paths, and diffs about the same specified
|
||||||
|
paths. With this, the full diff is shown for commits that touch
|
||||||
|
the specified paths; this means that "`<path>...`" limits only
|
||||||
|
commits, and doesn't limit diff for those commits.
|
||||||
|
+
|
||||||
|
Note that this affects all diff-based output types, e.g. those
|
||||||
|
produced by `--stat`, etc.
|
||||||
|
|
||||||
|
`--log-size`::
|
||||||
|
Include a line `log size <number>` in the output for each commit,
|
||||||
|
where _<number>_ is the length of that commit's message in bytes.
|
||||||
|
Intended to speed up tools that read log messages from `git log`
|
||||||
|
output by allowing them to allocate space in advance.
|
||||||
|
|
||||||
|
include::line-range-options.adoc[]
|
||||||
|
|
||||||
|
_<revision-range>_::
|
||||||
|
Show only commits in the specified revision range. When no
|
||||||
|
_<revision-range>_ is specified, it defaults to `HEAD` (i.e. the
|
||||||
|
whole history leading to the current commit). `origin..HEAD`
|
||||||
|
specifies all the commits reachable from the current commit
|
||||||
|
(i.e. `HEAD`), but not from `origin`. For a complete list of
|
||||||
|
ways to spell _<revision-range>_, see the 'Specifying Ranges'
|
||||||
|
section of linkgit:gitrevisions[7].
|
||||||
|
|
||||||
|
`[--] <path>...`::
|
||||||
|
Show only commits that are enough to explain how the files
|
||||||
|
that match the specified paths came to be. See 'History
|
||||||
|
Simplification' below for details and other simplification
|
||||||
|
modes.
|
||||||
|
+
|
||||||
|
Paths may need to be prefixed with `--` to separate them from
|
||||||
|
options or the revision range, when confusion arises.
|
||||||
|
|
||||||
|
include::rev-list-options.adoc[]
|
||||||
|
|
||||||
|
include::pretty-formats.adoc[]
|
||||||
|
|
||||||
|
DIFF FORMATTING
|
||||||
|
---------------
|
||||||
|
|
||||||
|
By default, `git log` does not generate any diff output. The options
|
||||||
|
below can be used to show the changes made by each commit.
|
||||||
|
|
||||||
|
Note that unless one of `--diff-merges` variants (including short
|
||||||
|
`-m`, `-c`, `--cc`, and `--dd` options) is explicitly given, merge commits
|
||||||
|
will not show a diff, even if a diff format like `--patch` is
|
||||||
|
selected, nor will they match search options like `-S`. The exception
|
||||||
|
is when `--first-parent` is in use, in which case `first-parent` is
|
||||||
|
the default format for merge commits.
|
||||||
|
|
||||||
|
:git-log: 1
|
||||||
|
:diff-merges-default: `off`
|
||||||
|
include::diff-options.adoc[]
|
||||||
|
|
||||||
|
include::diff-generate-patch.adoc[]
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
`git log --no-merges`::
|
||||||
|
|
||||||
|
Show the whole commit history, but skip any merges
|
||||||
|
|
||||||
|
`git log v2.6.12.. include/scsi drivers/scsi`::
|
||||||
|
|
||||||
|
Show all commits since version 'v2.6.12' that changed any file
|
||||||
|
in the `include/scsi` or `drivers/scsi` subdirectories
|
||||||
|
|
||||||
|
`git log --since="2 weeks ago" -- gitk`::
|
||||||
|
|
||||||
|
Show the changes during the last two weeks to the file `gitk`.
|
||||||
|
The `--` is necessary to avoid confusion with the *branch* named
|
||||||
|
`gitk`
|
||||||
|
|
||||||
|
`git log --name-status release..test`::
|
||||||
|
|
||||||
|
Show the commits that are in the "`test`" branch but not yet
|
||||||
|
in the "`release`" branch, along with the list of paths
|
||||||
|
each commit modifies.
|
||||||
|
|
||||||
|
`git log --follow builtin/rev-list.c`::
|
||||||
|
|
||||||
|
Shows the commits that changed `builtin/rev-list.c`, including
|
||||||
|
those commits that occurred before the file was given its
|
||||||
|
present name.
|
||||||
|
|
||||||
|
`git log --branches --not --remotes=origin`::
|
||||||
|
|
||||||
|
Shows all commits that are in any of local branches but not in
|
||||||
|
any of remote-tracking branches for `origin` (what you have that
|
||||||
|
origin doesn't).
|
||||||
|
|
||||||
|
`git log master --not --remotes=*/master`::
|
||||||
|
|
||||||
|
Shows all commits that are in local master but not in any remote
|
||||||
|
repository master branches.
|
||||||
|
|
||||||
|
`git log -p -m --first-parent`::
|
||||||
|
|
||||||
|
Shows the history including change diffs, but only from the
|
||||||
|
``main branch'' perspective, skipping commits that come from merged
|
||||||
|
branches, and showing full diffs of changes introduced by the merges.
|
||||||
|
This makes sense only when following a strict policy of merging all
|
||||||
|
topic branches when staying on a single integration branch.
|
||||||
|
|
||||||
|
`git log -L '/int main/',/^}/:main.c`::
|
||||||
|
|
||||||
|
Shows how the function `main()` in the file `main.c` evolved
|
||||||
|
over time.
|
||||||
|
|
||||||
|
`git log -3`::
|
||||||
|
|
||||||
|
Limits the number of commits to show to 3.
|
||||||
|
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
include::i18n.adoc[]
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
See linkgit:git-config[1] for core variables and linkgit:git-diff[1]
|
||||||
|
for settings related to diff generation.
|
||||||
|
|
||||||
|
`format.pretty`::
|
||||||
|
Default for the `--format` option. (See 'Pretty Formats' above.)
|
||||||
|
Defaults to `medium`.
|
||||||
|
|
||||||
|
`i18n.logOutputEncoding`::
|
||||||
|
Encoding to use when displaying logs. (See 'Discussion' above.)
|
||||||
|
Defaults to the value of `i18n.commitEncoding` if set, and UTF-8
|
||||||
|
otherwise.
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-rest.adoc[]
|
||||||
|
|
||||||
|
include::config/log.adoc[]
|
||||||
|
|
||||||
|
include::config/notes.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
344
app/src/main/assets/manpages/git-ls-files.txt
Normal file
344
app/src/main/assets/manpages/git-ls-files.txt
Normal file
@@ -0,0 +1,344 @@
|
|||||||
|
git-ls-files(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-ls-files - Show information about files in the index and the working tree
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git ls-files' [-z] [-t] [-v] [-f]
|
||||||
|
[-c|--cached] [-d|--deleted] [-o|--others] [-i|--ignored]
|
||||||
|
[-s|--stage] [-u|--unmerged] [-k|--killed] [-m|--modified]
|
||||||
|
[--resolve-undo]
|
||||||
|
[--directory [--no-empty-directory]] [--eol]
|
||||||
|
[--deduplicate]
|
||||||
|
[-x <pattern>|--exclude=<pattern>]
|
||||||
|
[-X <file>|--exclude-from=<file>]
|
||||||
|
[--exclude-per-directory=<file>]
|
||||||
|
[--exclude-standard]
|
||||||
|
[--error-unmatch] [--with-tree=<tree-ish>]
|
||||||
|
[--full-name] [--recurse-submodules]
|
||||||
|
[--abbrev[=<n>]] [--format=<format>] [--] [<file>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This command merges the file listing in the index with the actual working
|
||||||
|
directory list, and shows different combinations of the two.
|
||||||
|
|
||||||
|
Several flags can be used to determine which files are
|
||||||
|
shown, and each file may be printed multiple times if there are
|
||||||
|
multiple entries in the index or if multiple statuses are applicable for
|
||||||
|
the relevant file selection options.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-c::
|
||||||
|
--cached::
|
||||||
|
Show all files cached in Git's index, i.e. all tracked files.
|
||||||
|
(This is the default if no -c/-s/-d/-o/-u/-k/-m/--resolve-undo
|
||||||
|
options are specified.)
|
||||||
|
|
||||||
|
-d::
|
||||||
|
--deleted::
|
||||||
|
Show files with an unstaged deletion
|
||||||
|
|
||||||
|
-m::
|
||||||
|
--modified::
|
||||||
|
Show files with an unstaged modification (note that an unstaged
|
||||||
|
deletion also counts as an unstaged modification)
|
||||||
|
|
||||||
|
-o::
|
||||||
|
--others::
|
||||||
|
Show other (i.e. untracked) files in the output
|
||||||
|
|
||||||
|
-i::
|
||||||
|
--ignored::
|
||||||
|
Show only ignored files in the output. Must be used with
|
||||||
|
either an explicit '-c' or '-o'. When showing files in the
|
||||||
|
index (i.e. when used with '-c'), print only those files
|
||||||
|
matching an exclude pattern. When showing "other" files
|
||||||
|
(i.e. when used with '-o'), show only those matched by an
|
||||||
|
exclude pattern. Standard ignore rules are not automatically
|
||||||
|
activated; therefore, at least one of the `--exclude*` options
|
||||||
|
is required.
|
||||||
|
|
||||||
|
-s::
|
||||||
|
--stage::
|
||||||
|
Show staged contents' mode bits, object name and stage number in the output.
|
||||||
|
|
||||||
|
--directory::
|
||||||
|
If a whole directory is classified as "other", show just its
|
||||||
|
name (with a trailing slash) and not its whole contents.
|
||||||
|
Has no effect without -o/--others.
|
||||||
|
|
||||||
|
--no-empty-directory::
|
||||||
|
Do not list empty directories. Has no effect without --directory.
|
||||||
|
|
||||||
|
-u::
|
||||||
|
--unmerged::
|
||||||
|
Show information about unmerged files in the output, but do
|
||||||
|
not show any other tracked files (forces --stage, overrides
|
||||||
|
--cached).
|
||||||
|
|
||||||
|
-k::
|
||||||
|
--killed::
|
||||||
|
Show untracked files on the filesystem that need to be removed
|
||||||
|
due to file/directory conflicts for tracked files to be able to
|
||||||
|
be written to the filesystem.
|
||||||
|
|
||||||
|
--resolve-undo::
|
||||||
|
Show files having resolve-undo information in the index
|
||||||
|
together with their resolve-undo information. (resolve-undo
|
||||||
|
information is what is used to implement "git checkout -m
|
||||||
|
$PATH", i.e. to recreate merge conflicts that were
|
||||||
|
accidentally resolved)
|
||||||
|
|
||||||
|
-z::
|
||||||
|
\0 line termination on output and do not quote filenames.
|
||||||
|
See OUTPUT below for more information.
|
||||||
|
|
||||||
|
--deduplicate::
|
||||||
|
When only filenames are shown, suppress duplicates that may
|
||||||
|
come from having multiple stages during a merge, or giving
|
||||||
|
`--deleted` and `--modified` option at the same time.
|
||||||
|
When any of the `-t`, `--unmerged`, or `--stage` option is
|
||||||
|
in use, this option has no effect.
|
||||||
|
|
||||||
|
-x <pattern>::
|
||||||
|
--exclude=<pattern>::
|
||||||
|
Skip untracked files matching pattern.
|
||||||
|
Note that pattern is a shell wildcard pattern. See EXCLUDE PATTERNS
|
||||||
|
below for more information.
|
||||||
|
|
||||||
|
-X <file>::
|
||||||
|
--exclude-from=<file>::
|
||||||
|
Read exclude patterns from <file>; 1 per line.
|
||||||
|
|
||||||
|
--exclude-per-directory=<file>::
|
||||||
|
Read additional exclude patterns that apply only to the
|
||||||
|
directory and its subdirectories in <file>. If you are
|
||||||
|
trying to emulate the way Porcelain commands work, using
|
||||||
|
the `--exclude-standard` option instead is easier and more
|
||||||
|
thorough.
|
||||||
|
|
||||||
|
--exclude-standard::
|
||||||
|
Add the standard Git exclusions: .git/info/exclude, .gitignore
|
||||||
|
in each directory, and the user's global exclusion file.
|
||||||
|
|
||||||
|
--error-unmatch::
|
||||||
|
If any <file> does not appear in the index, treat this as an
|
||||||
|
error (return 1).
|
||||||
|
|
||||||
|
--with-tree=<tree-ish>::
|
||||||
|
When using --error-unmatch to expand the user supplied
|
||||||
|
<file> (i.e. path pattern) arguments to paths, pretend
|
||||||
|
that paths which were removed in the index since the
|
||||||
|
named <tree-ish> are still present. Using this option
|
||||||
|
with `-s` or `-u` options does not make any sense.
|
||||||
|
|
||||||
|
-t::
|
||||||
|
Show status tags together with filenames. Note that for
|
||||||
|
scripting purposes, linkgit:git-status[1] `--porcelain` and
|
||||||
|
linkgit:git-diff-files[1] `--name-status` are almost always
|
||||||
|
superior alternatives; users should look at
|
||||||
|
linkgit:git-status[1] `--short` or linkgit:git-diff[1]
|
||||||
|
`--name-status` for more user-friendly alternatives.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
This option provides a reason for showing each filename, in the form
|
||||||
|
of a status tag (which is followed by a space and then the filename).
|
||||||
|
The status tags are all single characters from the following list:
|
||||||
|
|
||||||
|
H:: tracked file that is not either unmerged or skip-worktree
|
||||||
|
S:: tracked file that is skip-worktree
|
||||||
|
M:: tracked file that is unmerged
|
||||||
|
R:: tracked file with unstaged removal/deletion
|
||||||
|
C:: tracked file with unstaged modification/change
|
||||||
|
K:: untracked paths which are part of file/directory conflicts
|
||||||
|
which prevent checking out tracked files
|
||||||
|
?:: untracked file
|
||||||
|
U:: file with resolve-undo information
|
||||||
|
--
|
||||||
|
|
||||||
|
-v::
|
||||||
|
Similar to `-t`, but use lowercase letters for files
|
||||||
|
that are marked as 'assume unchanged' (see
|
||||||
|
linkgit:git-update-index[1]).
|
||||||
|
|
||||||
|
-f::
|
||||||
|
Similar to `-t`, but use lowercase letters for files
|
||||||
|
that are marked as 'fsmonitor valid' (see
|
||||||
|
linkgit:git-update-index[1]).
|
||||||
|
|
||||||
|
--full-name::
|
||||||
|
When run from a subdirectory, the command usually
|
||||||
|
outputs paths relative to the current directory. This
|
||||||
|
option forces paths to be output relative to the project
|
||||||
|
top directory.
|
||||||
|
|
||||||
|
--recurse-submodules::
|
||||||
|
Recursively calls ls-files on each active submodule in the repository.
|
||||||
|
Currently there is only support for the --cached and --stage modes.
|
||||||
|
|
||||||
|
--abbrev[=<n>]::
|
||||||
|
Instead of showing the full 40-byte hexadecimal object
|
||||||
|
lines, show the shortest prefix that is at least '<n>'
|
||||||
|
hexdigits long that uniquely refers the object.
|
||||||
|
Non default number of digits can be specified with --abbrev=<n>.
|
||||||
|
|
||||||
|
--debug::
|
||||||
|
After each line that describes a file, add more data about its
|
||||||
|
cache entry. This is intended to show as much information as
|
||||||
|
possible for manual inspection; the exact format may change at
|
||||||
|
any time.
|
||||||
|
|
||||||
|
--eol::
|
||||||
|
Show <eolinfo> and <eolattr> of files.
|
||||||
|
<eolinfo> is the file content identification used by Git when
|
||||||
|
the "text" attribute is "auto" (or not set and core.autocrlf is not false).
|
||||||
|
<eolinfo> is either "-text", "none", "lf", "crlf", "mixed" or "".
|
||||||
|
+
|
||||||
|
"" means the file is not a regular file, it is not in the index or
|
||||||
|
not accessible in the working tree.
|
||||||
|
+
|
||||||
|
<eolattr> is the attribute that is used when checking out or committing,
|
||||||
|
it is either "", "-text", "text", "text=auto", "text eol=lf", "text eol=crlf".
|
||||||
|
Since Git 2.10 "text=auto eol=lf" and "text=auto eol=crlf" are supported.
|
||||||
|
+
|
||||||
|
Both the <eolinfo> in the index ("i/<eolinfo>")
|
||||||
|
and in the working tree ("w/<eolinfo>") are shown for regular files,
|
||||||
|
followed by the ("attr/<eolattr>").
|
||||||
|
|
||||||
|
--sparse::
|
||||||
|
If the index is sparse, show the sparse directories without expanding
|
||||||
|
to the contained files. Sparse directories will be shown with a
|
||||||
|
trailing slash, such as "x/" for a sparse directory "x".
|
||||||
|
|
||||||
|
--format=<format>::
|
||||||
|
A string that interpolates `%(fieldname)` from the result being shown.
|
||||||
|
It also interpolates `%%` to `%`, and `%xXX` where `XX` are hex digits
|
||||||
|
interpolates to character with hex code `XX`; for example `%x00`
|
||||||
|
interpolates to `\0` (NUL), `%x09` to `\t` (TAB) and %x0a to `\n` (LF).
|
||||||
|
--format cannot be combined with `-s`, `-o`, `-k`, `-t`, `--resolve-undo`
|
||||||
|
and `--eol`.
|
||||||
|
\--::
|
||||||
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
|
<file>::
|
||||||
|
Files to show. If no files are given all files which match the other
|
||||||
|
specified criteria are shown.
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
'git ls-files' just outputs the filenames unless `--stage` is specified in
|
||||||
|
which case it outputs:
|
||||||
|
|
||||||
|
[<tag> ]<mode> <object> <stage> <file>
|
||||||
|
|
||||||
|
'git ls-files --eol' will show
|
||||||
|
i/<eolinfo><SPACES>w/<eolinfo><SPACES>attr/<eolattr><SPACE*><TAB><file>
|
||||||
|
|
||||||
|
'git ls-files --unmerged' and 'git ls-files --stage' can be used to examine
|
||||||
|
detailed information on unmerged paths.
|
||||||
|
|
||||||
|
For an unmerged path, instead of recording a single mode/SHA-1 pair,
|
||||||
|
the index records up to three such pairs; one from tree O in stage
|
||||||
|
1, A in stage 2, and B in stage 3. This information can be used by
|
||||||
|
the user (or the porcelain) to see what should eventually be recorded at the
|
||||||
|
path. (see linkgit:git-read-tree[1] for more information on state)
|
||||||
|
|
||||||
|
Without the `-z` option, pathnames with "unusual" characters are
|
||||||
|
quoted as explained for the configuration variable `core.quotePath`
|
||||||
|
(see linkgit:git-config[1]). Using `-z` the filename is output
|
||||||
|
verbatim and the line is terminated by a NUL byte.
|
||||||
|
|
||||||
|
It is possible to print in a custom format by using the `--format`
|
||||||
|
option, which is able to interpolate different fields using
|
||||||
|
a `%(fieldname)` notation. For example, if you only care about the
|
||||||
|
"objectname" and "path" fields, you can execute with a specific
|
||||||
|
"--format" like
|
||||||
|
|
||||||
|
git ls-files --format='%(objectname) %(path)'
|
||||||
|
|
||||||
|
FIELD NAMES
|
||||||
|
-----------
|
||||||
|
The way each path is shown can be customized by using the
|
||||||
|
`--format=<format>` option, where the %(fieldname) in the
|
||||||
|
<format> string for various aspects of the index entry are
|
||||||
|
interpolated. The following "fieldname" are understood:
|
||||||
|
|
||||||
|
objectmode::
|
||||||
|
The mode of the file which is recorded in the index.
|
||||||
|
objecttype::
|
||||||
|
The object type of the file which is recorded in the index.
|
||||||
|
objectname::
|
||||||
|
The name of the file which is recorded in the index.
|
||||||
|
objectsize[:padded]::
|
||||||
|
The object size of the file which is recorded in the index
|
||||||
|
("-" if the object is a `commit` or `tree`).
|
||||||
|
It also supports a padded format of size with "%(objectsize:padded)".
|
||||||
|
stage::
|
||||||
|
The stage of the file which is recorded in the index.
|
||||||
|
eolinfo:index::
|
||||||
|
eolinfo:worktree::
|
||||||
|
The <eolinfo> (see the description of the `--eol` option) of
|
||||||
|
the contents in the index or in the worktree for the path.
|
||||||
|
eolattr::
|
||||||
|
The <eolattr> (see the description of the `--eol` option)
|
||||||
|
that applies to the path.
|
||||||
|
path::
|
||||||
|
The pathname of the file which is recorded in the index.
|
||||||
|
|
||||||
|
EXCLUDE PATTERNS
|
||||||
|
----------------
|
||||||
|
|
||||||
|
'git ls-files' can use a list of "exclude patterns" when
|
||||||
|
traversing the directory tree and finding files to show when the
|
||||||
|
flags --others or --ignored are specified. linkgit:gitignore[5]
|
||||||
|
specifies the format of exclude patterns.
|
||||||
|
|
||||||
|
These exclude patterns can be specified from the following places,
|
||||||
|
in order:
|
||||||
|
|
||||||
|
1. The command-line flag --exclude=<pattern> specifies a
|
||||||
|
single pattern. Patterns are ordered in the same order
|
||||||
|
they appear in the command line.
|
||||||
|
|
||||||
|
2. The command-line flag --exclude-from=<file> specifies a
|
||||||
|
file containing a list of patterns. Patterns are ordered
|
||||||
|
in the same order they appear in the file.
|
||||||
|
|
||||||
|
3. The command-line flag --exclude-per-directory=<name> specifies
|
||||||
|
a name of the file in each directory 'git ls-files'
|
||||||
|
examines, normally `.gitignore`. Files in deeper
|
||||||
|
directories take precedence. Patterns are ordered in the
|
||||||
|
same order they appear in the files.
|
||||||
|
|
||||||
|
A pattern specified on the command line with --exclude or read
|
||||||
|
from the file specified with --exclude-from is relative to the
|
||||||
|
top of the directory tree. A pattern read from a file specified
|
||||||
|
by --exclude-per-directory is relative to the directory that the
|
||||||
|
pattern file appears in.
|
||||||
|
|
||||||
|
Generally, you should be able to use `--exclude-standard` when you
|
||||||
|
want the exclude rules applied the same way as what Porcelain
|
||||||
|
commands do. To emulate what `--exclude-standard` specifies, you
|
||||||
|
can give `--exclude-per-directory=.gitignore`, and then specify:
|
||||||
|
|
||||||
|
1. The file specified by the `core.excludesfile` configuration
|
||||||
|
variable, if exists, or the `$XDG_CONFIG_HOME/git/ignore` file.
|
||||||
|
|
||||||
|
2. The `$GIT_DIR/info/exclude` file.
|
||||||
|
|
||||||
|
via the `--exclude-from=` option.
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-read-tree[1], linkgit:gitignore[5]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
157
app/src/main/assets/manpages/git-ls-remote.txt
Normal file
157
app/src/main/assets/manpages/git-ls-remote.txt
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
git-ls-remote(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-ls-remote - List references in a remote repository
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git ls-remote' [--branches] [--tags] [--refs] [--upload-pack=<exec>]
|
||||||
|
[-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]
|
||||||
|
[--symref] [<repository> [<patterns>...]]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Displays references available in a remote repository along with the associated
|
||||||
|
commit IDs.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-b::
|
||||||
|
--branches::
|
||||||
|
-t::
|
||||||
|
--tags::
|
||||||
|
Limit to only local branches and local tags, respectively.
|
||||||
|
These options are _not_ mutually exclusive; when given
|
||||||
|
both, references stored in refs/heads and refs/tags are
|
||||||
|
displayed. Note that `--heads` and `-h` are deprecated
|
||||||
|
synonyms for `--branches` and `-b` and may be removed in
|
||||||
|
the future. Also note that `git ls-remote -h` used without
|
||||||
|
anything else on the command line gives help, consistent
|
||||||
|
with other git subcommands.
|
||||||
|
|
||||||
|
--refs::
|
||||||
|
Do not show peeled tags or pseudorefs like `HEAD` in the output.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
--quiet::
|
||||||
|
Do not print remote URL to stderr.
|
||||||
|
|
||||||
|
--upload-pack=<exec>::
|
||||||
|
Specify the full path of 'git-upload-pack' on the remote
|
||||||
|
host. This allows listing references from repositories accessed via
|
||||||
|
SSH and where the SSH daemon does not use the PATH configured by the
|
||||||
|
user.
|
||||||
|
|
||||||
|
--exit-code::
|
||||||
|
Exit with status "2" when no matching refs are found in the remote
|
||||||
|
repository. Usually the command exits with status "0" to indicate
|
||||||
|
it successfully talked with the remote repository, whether it
|
||||||
|
found any matching refs.
|
||||||
|
|
||||||
|
--get-url::
|
||||||
|
Expand the URL of the given remote repository taking into account any
|
||||||
|
"url.<base>.insteadOf" config setting (See linkgit:git-config[1]) and
|
||||||
|
exit without talking to the remote.
|
||||||
|
|
||||||
|
--symref::
|
||||||
|
In addition to the object pointed by it, show the underlying
|
||||||
|
ref pointed by it when showing a symbolic ref. Currently,
|
||||||
|
upload-pack only shows the symref HEAD, so it will be the only
|
||||||
|
one shown by ls-remote.
|
||||||
|
|
||||||
|
--sort=<key>::
|
||||||
|
Sort based on the key given. Prefix `-` to sort in descending order
|
||||||
|
of the value. Supports "version:refname" or "v:refname" (tag names
|
||||||
|
are treated as versions). The "version:refname" sort order can also
|
||||||
|
be affected by the "versionsort.suffix" configuration variable.
|
||||||
|
See linkgit:git-for-each-ref[1] for more sort options, but be aware
|
||||||
|
keys like `committerdate` that require access to the objects
|
||||||
|
themselves will not work for refs whose objects have not yet been
|
||||||
|
fetched from the remote, and will give a `missing object` error.
|
||||||
|
|
||||||
|
-o <option>::
|
||||||
|
--server-option=<option>::
|
||||||
|
Transmit the given string to the server when communicating using
|
||||||
|
protocol version 2. The given string must not contain a NUL or LF
|
||||||
|
character.
|
||||||
|
When multiple `--server-option=<option>` are given, they are all
|
||||||
|
sent to the other side in the order listed on the command line.
|
||||||
|
When no `--server-option=<option>` is given from the command line,
|
||||||
|
the values of configuration variable `remote.<name>.serverOption`
|
||||||
|
are used instead.
|
||||||
|
|
||||||
|
<repository>::
|
||||||
|
The "remote" repository to query. This parameter can be
|
||||||
|
either a URL or the name of a remote (see the GIT URLS and
|
||||||
|
REMOTES sections of linkgit:git-fetch[1]).
|
||||||
|
|
||||||
|
<patterns>...::
|
||||||
|
When unspecified, all references, after filtering done
|
||||||
|
with --heads and --tags, are shown. When <patterns>... are
|
||||||
|
specified, only references matching one or more of the given
|
||||||
|
patterns are displayed. Each pattern is interpreted as a glob
|
||||||
|
(see `glob` in linkgit:gitglossary[7]) which is matched against
|
||||||
|
the "tail" of a ref, starting either from the start of the ref
|
||||||
|
(so a full name like `refs/heads/foo` matches) or from a slash
|
||||||
|
separator (so `bar` matches `refs/heads/bar` but not
|
||||||
|
`refs/heads/foobar`).
|
||||||
|
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
The output is in the format:
|
||||||
|
|
||||||
|
------------
|
||||||
|
<oid> TAB <ref> LF
|
||||||
|
------------
|
||||||
|
|
||||||
|
When showing an annotated tag, unless `--refs` is given, two such
|
||||||
|
lines are shown: one with the refname for the tag itself as `<ref>`,
|
||||||
|
and another with `<ref>` followed by `^{}`. The `<oid>` on the latter
|
||||||
|
line shows the name of the object the tag points at.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* List all references (including symbolics and pseudorefs), peeling
|
||||||
|
tags:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
$ git ls-remote
|
||||||
|
27d43aaaf50ef0ae014b88bba294f93658016a2e HEAD
|
||||||
|
950264636c68591989456e3ba0a5442f93152c1a refs/heads/main
|
||||||
|
d9ab777d41f92a8c1684c91cfb02053d7dd1046b refs/heads/next
|
||||||
|
d4ca2e3147b409459955613c152220f4db848ee1 refs/tags/v2.40.0
|
||||||
|
73876f4861cd3d187a4682290ab75c9dccadbc56 refs/tags/v2.40.0^{}
|
||||||
|
----
|
||||||
|
|
||||||
|
* List all references matching given patterns:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
$ git ls-remote http://www.kernel.org/pub/scm/git/git.git master seen rc
|
||||||
|
5fe978a5381f1fbad26a80e682ddd2a401966740 refs/heads/master
|
||||||
|
c781a84b5204fb294c9ccc79f8b3baceeb32c061 refs/heads/seen
|
||||||
|
----
|
||||||
|
|
||||||
|
* List only tags matching a given wildcard pattern:
|
||||||
|
+
|
||||||
|
----
|
||||||
|
$ git ls-remote --tags http://www.kernel.org/pub/scm/git/git.git v\*
|
||||||
|
485a869c64a68cc5795dd99689797c5900f4716d refs/tags/v2.39.2
|
||||||
|
cbf04937d5b9fcf0a76c28f69e6294e9e3ecd7e6 refs/tags/v2.39.2^{}
|
||||||
|
d4ca2e3147b409459955613c152220f4db848ee1 refs/tags/v2.40.0
|
||||||
|
73876f4861cd3d187a4682290ab75c9dccadbc56 refs/tags/v2.40.0^{}
|
||||||
|
----
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-check-ref-format[1].
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
165
app/src/main/assets/manpages/git-ls-tree.txt
Normal file
165
app/src/main/assets/manpages/git-ls-tree.txt
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
git-ls-tree(1)
|
||||||
|
==============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-ls-tree - List the contents of a tree object
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git ls-tree' [-d] [-r] [-t] [-l] [-z]
|
||||||
|
[--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
|
||||||
|
<tree-ish> [<path>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Lists the contents of a given tree object, like what "/bin/ls -a" does
|
||||||
|
in the current working directory. Note that:
|
||||||
|
|
||||||
|
- the behaviour is slightly different from that of "/bin/ls" in that the
|
||||||
|
'<path>' denotes just a list of patterns to match, e.g. so specifying
|
||||||
|
directory name (without `-r`) will behave differently, and order of the
|
||||||
|
arguments does not matter.
|
||||||
|
|
||||||
|
- the behaviour is similar to that of "/bin/ls" in that the '<path>' is
|
||||||
|
taken as relative to the current working directory. E.g. when you are
|
||||||
|
in a directory 'sub' that has a directory 'dir', you can run 'git
|
||||||
|
ls-tree -r HEAD dir' to list the contents of the tree (that is
|
||||||
|
`sub/dir` in `HEAD`). You don't want to give a tree that is not at the
|
||||||
|
root level (e.g. `git ls-tree -r HEAD:sub dir`) in this case, as that
|
||||||
|
would result in asking for `sub/sub/dir` in the `HEAD` commit.
|
||||||
|
However, the current working directory can be ignored by passing
|
||||||
|
--full-tree option.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<tree-ish>::
|
||||||
|
Id of a tree-ish.
|
||||||
|
|
||||||
|
-d::
|
||||||
|
Show only the named tree entry itself, not its children.
|
||||||
|
|
||||||
|
-r::
|
||||||
|
Recurse into sub-trees.
|
||||||
|
|
||||||
|
-t::
|
||||||
|
Show tree entries even when going to recurse them. Has no effect
|
||||||
|
if `-r` was not passed. `-d` implies `-t`.
|
||||||
|
|
||||||
|
-l::
|
||||||
|
--long::
|
||||||
|
Show object size of blob (file) entries.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
\0 line termination on output and do not quote filenames.
|
||||||
|
See OUTPUT FORMAT below for more information.
|
||||||
|
|
||||||
|
--name-only::
|
||||||
|
--name-status::
|
||||||
|
List only filenames (instead of the "long" output), one per line.
|
||||||
|
Cannot be combined with `--object-only`.
|
||||||
|
|
||||||
|
--object-only::
|
||||||
|
List only names of the objects, one per line. Cannot be combined
|
||||||
|
with `--name-only` or `--name-status`.
|
||||||
|
This is equivalent to specifying `--format='%(objectname)'`, but
|
||||||
|
for both this option and that exact format the command takes a
|
||||||
|
hand-optimized codepath instead of going through the generic
|
||||||
|
formatting mechanism.
|
||||||
|
|
||||||
|
--abbrev[=<n>]::
|
||||||
|
Instead of showing the full 40-byte hexadecimal object
|
||||||
|
lines, show the shortest prefix that is at least '<n>'
|
||||||
|
hexdigits long that uniquely refers the object.
|
||||||
|
Non default number of digits can be specified with --abbrev=<n>.
|
||||||
|
|
||||||
|
--full-name::
|
||||||
|
Instead of showing the path names relative to the current working
|
||||||
|
directory, show the full path names.
|
||||||
|
|
||||||
|
--full-tree::
|
||||||
|
Do not limit the listing to the current working directory.
|
||||||
|
Implies --full-name.
|
||||||
|
|
||||||
|
--format=<format>::
|
||||||
|
A string that interpolates `%(fieldname)` from the result
|
||||||
|
being shown. It also interpolates `%%` to `%`, and
|
||||||
|
`%xNN` where `NN` are hex digits interpolates to character
|
||||||
|
with hex code `NN`; for example `%x00` interpolates to
|
||||||
|
`\0` (NUL), `%x09` to `\t` (TAB) and `%x0a` to `\n` (LF).
|
||||||
|
When specified, `--format` cannot be combined with other
|
||||||
|
format-altering options, including `--long`, `--name-only`
|
||||||
|
and `--object-only`.
|
||||||
|
|
||||||
|
[<path>...]::
|
||||||
|
When paths are given, show them (note that this isn't really raw
|
||||||
|
pathnames, but rather a list of patterns to match). Otherwise
|
||||||
|
implicitly uses the root level of the tree as the sole path argument.
|
||||||
|
|
||||||
|
|
||||||
|
Output Format
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The output format of `ls-tree` is determined by either the `--format`
|
||||||
|
option, or other format-altering options such as `--name-only` etc.
|
||||||
|
(see `--format` above).
|
||||||
|
|
||||||
|
The use of certain `--format` directives is equivalent to using those
|
||||||
|
options, but invoking the full formatting machinery can be slower than
|
||||||
|
using an appropriate formatting option.
|
||||||
|
|
||||||
|
In cases where the `--format` would exactly map to an existing option
|
||||||
|
`ls-tree` will use the appropriate faster path. Thus the default format
|
||||||
|
is equivalent to:
|
||||||
|
|
||||||
|
%(objectmode) %(objecttype) %(objectname)%x09%(path)
|
||||||
|
|
||||||
|
This output format is compatible with what `--index-info --stdin` of
|
||||||
|
'git update-index' expects.
|
||||||
|
|
||||||
|
When the `-l` option is used, format changes to
|
||||||
|
|
||||||
|
%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)
|
||||||
|
|
||||||
|
Object size identified by <objectname> is given in bytes, and right-justified
|
||||||
|
with minimum width of 7 characters. Object size is given only for blobs
|
||||||
|
(file) entries; for other entries `-` character is used in place of size.
|
||||||
|
|
||||||
|
Without the `-z` option, pathnames with "unusual" characters are
|
||||||
|
quoted as explained for the configuration variable `core.quotePath`
|
||||||
|
(see linkgit:git-config[1]). Using `-z` the filename is output
|
||||||
|
verbatim and the line is terminated by a NUL byte.
|
||||||
|
|
||||||
|
Customized format:
|
||||||
|
|
||||||
|
It is possible to print in a custom format by using the `--format` option,
|
||||||
|
which is able to interpolate different fields using a `%(fieldname)` notation.
|
||||||
|
For example, if you only care about the "objectname" and "path" fields, you
|
||||||
|
can execute with a specific "--format" like
|
||||||
|
|
||||||
|
git ls-tree --format='%(objectname) %(path)' <tree-ish>
|
||||||
|
|
||||||
|
FIELD NAMES
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Various values from structured fields can be used to interpolate
|
||||||
|
into the resulting output. For each outputting line, the following
|
||||||
|
names can be used:
|
||||||
|
|
||||||
|
objectmode::
|
||||||
|
The mode of the object.
|
||||||
|
objecttype::
|
||||||
|
The type of the object (`commit`, `blob` or `tree`).
|
||||||
|
objectname::
|
||||||
|
The name of the object.
|
||||||
|
objectsize[:padded]::
|
||||||
|
The size of a `blob` object ("-" if it's a `commit` or `tree`).
|
||||||
|
It also supports a padded format of size with "%(objectsize:padded)".
|
||||||
|
path::
|
||||||
|
The pathname of the object.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
127
app/src/main/assets/manpages/git-mailinfo.txt
Normal file
127
app/src/main/assets/manpages/git-mailinfo.txt
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
git-mailinfo(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mailinfo - Extracts patch and authorship from a single e-mail message
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git mailinfo' [-k|-b] [-u | --encoding=<encoding> | -n]
|
||||||
|
[--[no-]scissors] [--quoted-cr=<action>]
|
||||||
|
<msg> <patch>
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Reads a single e-mail message from the standard input, and
|
||||||
|
writes the commit log message in <msg> file, and the patches in
|
||||||
|
<patch> file. The author name, e-mail and e-mail subject are
|
||||||
|
written out to the standard output to be used by 'git am'
|
||||||
|
to create a commit. It is usually not necessary to use this
|
||||||
|
command directly. See linkgit:git-am[1] instead.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-k::
|
||||||
|
Usually the program removes email cruft from the Subject:
|
||||||
|
header line to extract the title line for the commit log
|
||||||
|
message. This option prevents this munging, and is most
|
||||||
|
useful when used to read back 'git format-patch -k' output.
|
||||||
|
+
|
||||||
|
Specifically, the following are removed until none of them remain:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* Leading and trailing whitespace.
|
||||||
|
|
||||||
|
* Leading `Re:`, `re:`, and `:`.
|
||||||
|
|
||||||
|
* Leading bracketed strings (between `[` and `]`, usually
|
||||||
|
`[PATCH]`).
|
||||||
|
--
|
||||||
|
+
|
||||||
|
Finally, runs of whitespace are normalized to a single ASCII space
|
||||||
|
character.
|
||||||
|
|
||||||
|
-b::
|
||||||
|
When -k is not in effect, all leading strings bracketed with '['
|
||||||
|
and ']' pairs are stripped. This option limits the stripping to
|
||||||
|
only the pairs whose bracketed string contains the word "PATCH".
|
||||||
|
|
||||||
|
-u::
|
||||||
|
The commit log message, author name and author email are
|
||||||
|
taken from the e-mail, and after minimally decoding MIME
|
||||||
|
transfer encoding, re-coded in the charset specified by
|
||||||
|
`i18n.commitEncoding` (defaulting to UTF-8) by transliterating
|
||||||
|
them. This used to be optional but now it is the default.
|
||||||
|
+
|
||||||
|
Note that the patch is always used as-is without charset
|
||||||
|
conversion, even with this flag.
|
||||||
|
|
||||||
|
--encoding=<encoding>::
|
||||||
|
Similar to -u. But when re-coding, the charset specified here is
|
||||||
|
used instead of the one specified by `i18n.commitEncoding` or UTF-8.
|
||||||
|
|
||||||
|
-n::
|
||||||
|
Disable all charset re-coding of the metadata.
|
||||||
|
|
||||||
|
-m::
|
||||||
|
--message-id::
|
||||||
|
Copy the Message-ID header at the end of the commit message. This
|
||||||
|
is useful in order to associate commits with mailing list discussions.
|
||||||
|
|
||||||
|
--scissors::
|
||||||
|
Remove everything in body before a scissors line (e.g. "-- >8 --").
|
||||||
|
The line represents scissors and perforation marks, and is used to
|
||||||
|
request the reader to cut the message at that line. If that line
|
||||||
|
appears in the body of the message before the patch, everything
|
||||||
|
before it (including the scissors line itself) is ignored when
|
||||||
|
this option is used.
|
||||||
|
+
|
||||||
|
This is useful if you want to begin your message in a discussion thread
|
||||||
|
with comments and suggestions on the message you are responding to, and to
|
||||||
|
conclude it with a patch submission, separating the discussion and the
|
||||||
|
beginning of the proposed commit log message with a scissors line.
|
||||||
|
+
|
||||||
|
This can be enabled by default with the configuration option mailinfo.scissors.
|
||||||
|
|
||||||
|
--no-scissors::
|
||||||
|
Ignore scissors lines. Useful for overriding mailinfo.scissors settings.
|
||||||
|
|
||||||
|
--quoted-cr=<action>::
|
||||||
|
Action when processes email messages sent with base64 or
|
||||||
|
quoted-printable encoding, and the decoded lines end with a CRLF
|
||||||
|
instead of a simple LF.
|
||||||
|
+
|
||||||
|
The valid actions are:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* `nowarn`: Git will do nothing when such a CRLF is found.
|
||||||
|
* `warn`: Git will issue a warning for each message if such a CRLF is
|
||||||
|
found.
|
||||||
|
* `strip`: Git will convert those CRLF to LF.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
The default action could be set by configuration option `mailinfo.quotedCR`.
|
||||||
|
If no such configuration option has been set, `warn` will be used.
|
||||||
|
|
||||||
|
<msg>::
|
||||||
|
The commit log message extracted from e-mail, usually
|
||||||
|
except the title line which comes from e-mail Subject.
|
||||||
|
|
||||||
|
<patch>::
|
||||||
|
The patch extracted from e-mail.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/mailinfo.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
57
app/src/main/assets/manpages/git-mailsplit.txt
Normal file
57
app/src/main/assets/manpages/git-mailsplit.txt
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
git-mailsplit(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mailsplit - Simple UNIX mbox splitter program
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git mailsplit' [-b] [-f<nn>] [-d<prec>] [--keep-cr] [--mboxrd]
|
||||||
|
-o<directory> [--] [(<mbox>|<Maildir>)...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Splits a mbox file or a Maildir into a list of files: "0001" "0002" .. in the
|
||||||
|
specified directory so you can process them further from there.
|
||||||
|
|
||||||
|
IMPORTANT: Maildir splitting relies upon filenames being sorted to output
|
||||||
|
patches in the correct order.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
<mbox>::
|
||||||
|
Mbox file to split. If not given, the mbox is read from
|
||||||
|
the standard input.
|
||||||
|
|
||||||
|
<Maildir>::
|
||||||
|
Root of the Maildir to split. This directory should contain the cur, tmp
|
||||||
|
and new subdirectories.
|
||||||
|
|
||||||
|
-o<directory>::
|
||||||
|
Directory in which to place the individual messages.
|
||||||
|
|
||||||
|
-b::
|
||||||
|
If any file doesn't begin with a From line, assume it is a
|
||||||
|
single mail message instead of signaling an error.
|
||||||
|
|
||||||
|
-d<prec>::
|
||||||
|
Instead of the default 4 digits with leading zeros,
|
||||||
|
different precision can be specified for the generated
|
||||||
|
filenames.
|
||||||
|
|
||||||
|
-f<nn>::
|
||||||
|
Skip the first <nn> numbers, for example if -f3 is specified,
|
||||||
|
start the numbering with 0004.
|
||||||
|
|
||||||
|
--keep-cr::
|
||||||
|
Do not remove `\r` from lines ending with `\r\n`.
|
||||||
|
|
||||||
|
--mboxrd::
|
||||||
|
Input is of the "mboxrd" format and "^>+From " line escaping is
|
||||||
|
reversed.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
448
app/src/main/assets/manpages/git-maintenance.txt
Normal file
448
app/src/main/assets/manpages/git-maintenance.txt
Normal file
@@ -0,0 +1,448 @@
|
|||||||
|
git-maintenance(1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-maintenance - Run tasks to optimize Git repository data
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git maintenance' run [<options>]
|
||||||
|
'git maintenance' start [--scheduler=<scheduler>]
|
||||||
|
'git maintenance' (stop|register|unregister) [<options>]
|
||||||
|
'git maintenance' is-needed [<options>]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Run tasks to optimize Git repository data, speeding up other Git commands
|
||||||
|
and reducing storage requirements for the repository.
|
||||||
|
|
||||||
|
Git commands that add repository data, such as `git add` or `git fetch`,
|
||||||
|
are optimized for a responsive user experience. These commands do not take
|
||||||
|
time to optimize the Git data, since such optimizations scale with the full
|
||||||
|
size of the repository while these user commands each perform a relatively
|
||||||
|
small action.
|
||||||
|
|
||||||
|
The `git maintenance` command provides flexibility for how to optimize the
|
||||||
|
Git repository.
|
||||||
|
|
||||||
|
SUBCOMMANDS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
run::
|
||||||
|
Run one or more maintenance tasks. If one or more `--task` options
|
||||||
|
are specified, then those tasks are run in that order. Otherwise,
|
||||||
|
the tasks are determined by which `maintenance.<task>.enabled`
|
||||||
|
config options are true. By default, only `maintenance.gc.enabled`
|
||||||
|
is true.
|
||||||
|
|
||||||
|
start::
|
||||||
|
Start running maintenance on the current repository. This performs
|
||||||
|
the same config updates as the `register` subcommand, then updates
|
||||||
|
the background scheduler to run `git maintenance run --scheduled`
|
||||||
|
on an hourly basis.
|
||||||
|
|
||||||
|
stop::
|
||||||
|
Halt the background maintenance schedule. The current repository
|
||||||
|
is not removed from the list of maintained repositories, in case
|
||||||
|
the background maintenance is restarted later.
|
||||||
|
|
||||||
|
register::
|
||||||
|
Initialize Git config values so any scheduled maintenance will start
|
||||||
|
running on this repository. This adds the repository to the
|
||||||
|
`maintenance.repo` config variable in the current user's global config,
|
||||||
|
or the config specified by --config-file option, and enables some
|
||||||
|
recommended configuration values for `maintenance.<task>.schedule`. The
|
||||||
|
tasks that are enabled are safe for running in the background without
|
||||||
|
disrupting foreground processes.
|
||||||
|
+
|
||||||
|
The `register` subcommand will also set the `maintenance.strategy` config
|
||||||
|
value to `incremental`, if this value is not previously set. The
|
||||||
|
`incremental` strategy uses the following schedule for each maintenance
|
||||||
|
task:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
* `gc`: disabled.
|
||||||
|
* `commit-graph`: hourly.
|
||||||
|
* `prefetch`: hourly.
|
||||||
|
* `loose-objects`: daily.
|
||||||
|
* `incremental-repack`: daily.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
`git maintenance register` will also disable foreground maintenance by
|
||||||
|
setting `maintenance.auto = false` in the current repository. This config
|
||||||
|
setting will remain after a `git maintenance unregister` command.
|
||||||
|
|
||||||
|
unregister::
|
||||||
|
Remove the current repository from background maintenance. This
|
||||||
|
only removes the repository from the configured list. It does not
|
||||||
|
stop the background maintenance processes from running.
|
||||||
|
+
|
||||||
|
The `unregister` subcommand will report an error if the current repository
|
||||||
|
is not already registered. Use the `--force` option to return success even
|
||||||
|
when the current repository is not registered.
|
||||||
|
|
||||||
|
is-needed::
|
||||||
|
Check whether maintenance needs to be run without actually running it.
|
||||||
|
Exits with a 0 status code if maintenance needs to be run, 1 otherwise.
|
||||||
|
Ideally used with the '--auto' flag.
|
||||||
|
+
|
||||||
|
If one or more `--task` options are specified, then those tasks are checked
|
||||||
|
in that order. Otherwise, the tasks are determined by which
|
||||||
|
`maintenance.<task>.enabled` config options are true. By default, only
|
||||||
|
`maintenance.gc.enabled` is true.
|
||||||
|
|
||||||
|
TASKS
|
||||||
|
-----
|
||||||
|
|
||||||
|
commit-graph::
|
||||||
|
The `commit-graph` job updates the `commit-graph` files incrementally,
|
||||||
|
then verifies that the written data is correct. The incremental
|
||||||
|
write is safe to run alongside concurrent Git processes since it
|
||||||
|
will not expire `.graph` files that were in the previous
|
||||||
|
`commit-graph-chain` file. They will be deleted by a later run based
|
||||||
|
on the expiration delay.
|
||||||
|
|
||||||
|
prefetch::
|
||||||
|
The `prefetch` task updates the object directory with the latest
|
||||||
|
objects from all registered remotes. For each remote, a `git fetch`
|
||||||
|
command is run. The configured refspec is modified to place all
|
||||||
|
requested refs within `refs/prefetch/`. Also, tags are not updated.
|
||||||
|
+
|
||||||
|
This is done to avoid disrupting the remote-tracking branches. The end users
|
||||||
|
expect these refs to stay unmoved unless they initiate a fetch. However,
|
||||||
|
with the prefetch task, the objects necessary to complete a later real fetch
|
||||||
|
would already be obtained, making the real fetch faster. In the ideal case,
|
||||||
|
it will just become an update to a bunch of remote-tracking branches without
|
||||||
|
any object transfer.
|
||||||
|
+
|
||||||
|
The `remote.<name>.skipFetchAll` configuration can be used to
|
||||||
|
exclude a particular remote from getting prefetched.
|
||||||
|
|
||||||
|
gc::
|
||||||
|
Clean up unnecessary files and optimize the local repository. "GC"
|
||||||
|
stands for "garbage collection," but this task performs many
|
||||||
|
smaller tasks. This task can be expensive for large repositories,
|
||||||
|
as it repacks all Git objects into a single pack-file. It can also
|
||||||
|
be disruptive in some situations, as it deletes stale data. See
|
||||||
|
linkgit:git-gc[1] for more details on garbage collection in Git.
|
||||||
|
|
||||||
|
loose-objects::
|
||||||
|
The `loose-objects` job cleans up loose objects and places them into
|
||||||
|
pack-files. In order to prevent race conditions with concurrent Git
|
||||||
|
commands, it follows a two-step process. First, it deletes any loose
|
||||||
|
objects that already exist in a pack-file; concurrent Git processes
|
||||||
|
will examine the pack-file for the object data instead of the loose
|
||||||
|
object. Second, it creates a new pack-file (starting with "loose-")
|
||||||
|
containing a batch of loose objects.
|
||||||
|
+
|
||||||
|
The batch size defaults to fifty thousand objects to prevent the job from
|
||||||
|
taking too long on a repository with many loose objects. Use the
|
||||||
|
`maintenance.loose-objects.batchSize` config option to adjust this size,
|
||||||
|
including a value of `0` to remove the limit.
|
||||||
|
+
|
||||||
|
The `gc` task writes unreachable objects as loose objects to be cleaned up
|
||||||
|
by a later step only if they are not re-added to a pack-file; for this
|
||||||
|
reason it is not advisable to enable both the `loose-objects` and `gc`
|
||||||
|
tasks at the same time.
|
||||||
|
|
||||||
|
incremental-repack::
|
||||||
|
The `incremental-repack` job repacks the object directory
|
||||||
|
using the `multi-pack-index` feature. In order to prevent race
|
||||||
|
conditions with concurrent Git commands, it follows a two-step
|
||||||
|
process. First, it calls `git multi-pack-index expire` to delete
|
||||||
|
pack-files unreferenced by the `multi-pack-index` file. Second, it
|
||||||
|
calls `git multi-pack-index repack` to select several small
|
||||||
|
pack-files and repack them into a bigger one, and then update the
|
||||||
|
`multi-pack-index` entries that refer to the small pack-files to
|
||||||
|
refer to the new pack-file. This prepares those small pack-files
|
||||||
|
for deletion upon the next run of `git multi-pack-index expire`.
|
||||||
|
The selection of the small pack-files is such that the expected
|
||||||
|
size of the big pack-file is at least the batch size; see the
|
||||||
|
`--batch-size` option for the `repack` subcommand in
|
||||||
|
linkgit:git-multi-pack-index[1]. The default batch-size is zero,
|
||||||
|
which is a special case that attempts to repack all pack-files
|
||||||
|
into a single pack-file.
|
||||||
|
|
||||||
|
pack-refs::
|
||||||
|
The `pack-refs` task collects the loose reference files and
|
||||||
|
collects them into a single file. This speeds up operations that
|
||||||
|
need to iterate across many references. See linkgit:git-pack-refs[1]
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
reflog-expire::
|
||||||
|
The `reflog-expire` task deletes any entries in the reflog older than the
|
||||||
|
expiry threshold. See linkgit:git-reflog[1] for more information.
|
||||||
|
|
||||||
|
rerere-gc::
|
||||||
|
The `rerere-gc` task invokes garbage collection for stale entries in
|
||||||
|
the rerere cache. See linkgit:git-rerere[1] for more information.
|
||||||
|
|
||||||
|
worktree-prune::
|
||||||
|
The `worktree-prune` task deletes stale or broken worktrees. See
|
||||||
|
linkgit:git-worktree[1] for more information.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--auto::
|
||||||
|
When combined with the `run` subcommand, run maintenance tasks
|
||||||
|
only if certain thresholds are met. For example, the `gc` task
|
||||||
|
runs when the number of loose objects exceeds the number stored
|
||||||
|
in the `gc.auto` config setting, or when the number of pack-files
|
||||||
|
exceeds the `gc.autoPackLimit` config setting. Not compatible with
|
||||||
|
the `--schedule` option.
|
||||||
|
When combined with the `is-needed` subcommand, check if the required
|
||||||
|
thresholds are met without actually running maintenance.
|
||||||
|
|
||||||
|
--schedule::
|
||||||
|
When combined with the `run` subcommand, run maintenance tasks
|
||||||
|
only if certain time conditions are met, as specified by the
|
||||||
|
`maintenance.<task>.schedule` config value for each `<task>`.
|
||||||
|
This config value specifies a number of seconds since the last
|
||||||
|
time that task ran, according to the `maintenance.<task>.lastRun`
|
||||||
|
config value. The tasks that are tested are those provided by
|
||||||
|
the `--task=<task>` option(s) or those with
|
||||||
|
`maintenance.<task>.enabled` set to true.
|
||||||
|
|
||||||
|
--quiet::
|
||||||
|
Do not report progress or other information over `stderr`.
|
||||||
|
|
||||||
|
--task=<task>::
|
||||||
|
If this option is specified one or more times, then only run the
|
||||||
|
specified tasks in the specified order. If no `--task=<task>`
|
||||||
|
arguments are specified, then only the tasks with
|
||||||
|
`maintenance.<task>.enabled` configured as `true` are considered.
|
||||||
|
See the 'TASKS' section for the list of accepted `<task>` values.
|
||||||
|
|
||||||
|
--scheduler=auto|crontab|systemd-timer|launchctl|schtasks::
|
||||||
|
When combined with the `start` subcommand, specify the scheduler
|
||||||
|
for running the hourly, daily and weekly executions of
|
||||||
|
`git maintenance run`.
|
||||||
|
Possible values for `<scheduler>` are `auto`, `crontab`
|
||||||
|
(POSIX), `systemd-timer` (Linux), `launchctl` (macOS), and
|
||||||
|
`schtasks` (Windows). When `auto` is specified, the
|
||||||
|
appropriate platform-specific scheduler is used; on Linux,
|
||||||
|
`systemd-timer` is used if available, otherwise
|
||||||
|
`crontab`. Default is `auto`.
|
||||||
|
|
||||||
|
|
||||||
|
TROUBLESHOOTING
|
||||||
|
---------------
|
||||||
|
The `git maintenance` command is designed to simplify the repository
|
||||||
|
maintenance patterns while minimizing user wait time during Git commands.
|
||||||
|
A variety of configuration options are available to allow customizing this
|
||||||
|
process. The default maintenance options focus on operations that complete
|
||||||
|
quickly, even on large repositories.
|
||||||
|
|
||||||
|
Users may find some cases where scheduled maintenance tasks do not run as
|
||||||
|
frequently as intended. Each `git maintenance run` command takes a lock on
|
||||||
|
the repository's object database, and this prevents other concurrent
|
||||||
|
`git maintenance run` commands from running on the same repository. Without
|
||||||
|
this safeguard, competing processes could leave the repository in an
|
||||||
|
unpredictable state.
|
||||||
|
|
||||||
|
The background maintenance schedule runs `git maintenance run` processes
|
||||||
|
on an hourly basis. Each run executes the "hourly" tasks. At midnight,
|
||||||
|
that process also executes the "daily" tasks. At midnight on the first day
|
||||||
|
of the week, that process also executes the "weekly" tasks. A single
|
||||||
|
process iterates over each registered repository, performing the scheduled
|
||||||
|
tasks for that frequency. The processes are scheduled to a random minute of
|
||||||
|
the hour per client to spread out the load that multiple clients might
|
||||||
|
generate (e.g. from prefetching). Depending on the number of registered
|
||||||
|
repositories and their sizes, this process may take longer than an hour.
|
||||||
|
In this case, multiple `git maintenance run` commands may run on the same
|
||||||
|
repository at the same time, colliding on the object database lock. This
|
||||||
|
results in one of the two tasks not running.
|
||||||
|
|
||||||
|
If you find that some maintenance windows are taking longer than one hour
|
||||||
|
to complete, then consider reducing the complexity of your maintenance
|
||||||
|
tasks. For example, the `gc` task is much slower than the
|
||||||
|
`incremental-repack` task. However, this comes at a cost of a slightly
|
||||||
|
larger object database. Consider moving more expensive tasks to be run
|
||||||
|
less frequently.
|
||||||
|
|
||||||
|
Expert users may consider scheduling their own maintenance tasks using a
|
||||||
|
different schedule than is available through `git maintenance start` and
|
||||||
|
Git configuration options. These users should be aware of the object
|
||||||
|
database lock and how concurrent `git maintenance run` commands behave.
|
||||||
|
Further, the `git gc` command should not be combined with
|
||||||
|
`git maintenance run` commands. `git gc` modifies the object database
|
||||||
|
but does not take the lock in the same way as `git maintenance run`. If
|
||||||
|
possible, use `git maintenance run --task=gc` instead of `git gc`.
|
||||||
|
|
||||||
|
The following sections describe the mechanisms put in place to run
|
||||||
|
background maintenance by `git maintenance start` and how to customize
|
||||||
|
them.
|
||||||
|
|
||||||
|
BACKGROUND MAINTENANCE ON POSIX SYSTEMS
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
The standard mechanism for scheduling background tasks on POSIX systems
|
||||||
|
is cron(8). This tool executes commands based on a given schedule. The
|
||||||
|
current list of user-scheduled tasks can be found by running `crontab -l`.
|
||||||
|
The schedule written by `git maintenance start` is similar to this:
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
# BEGIN GIT MAINTENANCE SCHEDULE
|
||||||
|
# The following schedule was created by Git
|
||||||
|
# Any edits made in this region might be
|
||||||
|
# replaced in the future by a Git command.
|
||||||
|
|
||||||
|
0 1-23 * * * "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=hourly
|
||||||
|
0 0 * * 1-6 "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=daily
|
||||||
|
0 0 * * 0 "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=weekly
|
||||||
|
|
||||||
|
# END GIT MAINTENANCE SCHEDULE
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
The comments are used as a region to mark the schedule as written by Git.
|
||||||
|
Any modifications within this region will be completely deleted by
|
||||||
|
`git maintenance stop` or overwritten by `git maintenance start`.
|
||||||
|
|
||||||
|
The `crontab` entry specifies the full path of the `git` executable to
|
||||||
|
ensure that the executed `git` command is the same one with which
|
||||||
|
`git maintenance start` was issued independent of `PATH`. If the same user
|
||||||
|
runs `git maintenance start` with multiple Git executables, then only the
|
||||||
|
latest executable is used.
|
||||||
|
|
||||||
|
These commands use `git for-each-repo --config=maintenance.repo` to run
|
||||||
|
`git maintenance run --schedule=<frequency>` on each repository listed in
|
||||||
|
the multi-valued `maintenance.repo` config option. These are typically
|
||||||
|
loaded from the user-specific global config. The `git maintenance` process
|
||||||
|
then determines which maintenance tasks are configured to run on each
|
||||||
|
repository with each `<frequency>` using the `maintenance.<task>.schedule`
|
||||||
|
config options. These values are loaded from the global or repository
|
||||||
|
config values.
|
||||||
|
|
||||||
|
If the config values are insufficient to achieve your desired background
|
||||||
|
maintenance schedule, then you can create your own schedule. If you run
|
||||||
|
`crontab -e`, then an editor will load with your user-specific `cron`
|
||||||
|
schedule. In that editor, you can add your own schedule lines. You could
|
||||||
|
start by adapting the default schedule listed earlier, or you could read
|
||||||
|
the crontab(5) documentation for advanced scheduling techniques. Please
|
||||||
|
do use the full path and `--exec-path` techniques from the default
|
||||||
|
schedule to ensure you are executing the correct binaries in your
|
||||||
|
schedule.
|
||||||
|
|
||||||
|
|
||||||
|
BACKGROUND MAINTENANCE ON LINUX SYSTEMD SYSTEMS
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
While Linux supports `cron`, depending on the distribution, `cron` may
|
||||||
|
be an optional package not necessarily installed. On modern Linux
|
||||||
|
distributions, systemd timers are superseding it.
|
||||||
|
|
||||||
|
If user systemd timers are available, they will be used as a replacement
|
||||||
|
of `cron`.
|
||||||
|
|
||||||
|
In this case, `git maintenance start` will create user systemd timer units
|
||||||
|
and start the timers. The current list of user-scheduled tasks can be found
|
||||||
|
by running `systemctl --user list-timers`. The timers written by `git
|
||||||
|
maintenance start` are similar to this:
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
$ systemctl --user list-timers
|
||||||
|
NEXT LEFT LAST PASSED UNIT ACTIVATES
|
||||||
|
Thu 2021-04-29 19:00:00 CEST 42min left Thu 2021-04-29 18:00:11 CEST 17min ago git-maintenance@hourly.timer git-maintenance@hourly.service
|
||||||
|
Fri 2021-04-30 00:00:00 CEST 5h 42min left Thu 2021-04-29 00:00:11 CEST 18h ago git-maintenance@daily.timer git-maintenance@daily.service
|
||||||
|
Mon 2021-05-03 00:00:00 CEST 3 days left Mon 2021-04-26 00:00:11 CEST 3 days ago git-maintenance@weekly.timer git-maintenance@weekly.service
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
One timer is registered for each `--schedule=<frequency>` option.
|
||||||
|
|
||||||
|
The definition of the systemd units can be inspected in the following files:
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
~/.config/systemd/user/git-maintenance@.timer
|
||||||
|
~/.config/systemd/user/git-maintenance@.service
|
||||||
|
~/.config/systemd/user/timers.target.wants/git-maintenance@hourly.timer
|
||||||
|
~/.config/systemd/user/timers.target.wants/git-maintenance@daily.timer
|
||||||
|
~/.config/systemd/user/timers.target.wants/git-maintenance@weekly.timer
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
`git maintenance start` will overwrite these files and start the timer
|
||||||
|
again with `systemctl --user`, so any customization should be done by
|
||||||
|
creating a drop-in file, i.e. a `.conf` suffixed file in the
|
||||||
|
`~/.config/systemd/user/git-maintenance@.service.d` directory.
|
||||||
|
|
||||||
|
`git maintenance stop` will stop the user systemd timers and delete
|
||||||
|
the above mentioned files.
|
||||||
|
|
||||||
|
For more details, see `systemd.timer(5)`.
|
||||||
|
|
||||||
|
|
||||||
|
BACKGROUND MAINTENANCE ON MACOS SYSTEMS
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
While macOS technically supports `cron`, using `crontab -e` requires
|
||||||
|
elevated privileges and the executed process does not have a full user
|
||||||
|
context. Without a full user context, Git and its credential helpers
|
||||||
|
cannot access stored credentials, so some maintenance tasks are not
|
||||||
|
functional.
|
||||||
|
|
||||||
|
Instead, `git maintenance start` interacts with the `launchctl` tool,
|
||||||
|
which is the recommended way to schedule timed jobs in macOS. Scheduling
|
||||||
|
maintenance through `git maintenance (start|stop)` requires some
|
||||||
|
`launchctl` features available only in macOS 10.11 or later.
|
||||||
|
|
||||||
|
Your user-specific scheduled tasks are stored as XML-formatted `.plist`
|
||||||
|
files in `~/Library/LaunchAgents/`. You can see the currently-registered
|
||||||
|
tasks using the following command:
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
$ ls ~/Library/LaunchAgents/org.git-scm.git*
|
||||||
|
org.git-scm.git.daily.plist
|
||||||
|
org.git-scm.git.hourly.plist
|
||||||
|
org.git-scm.git.weekly.plist
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
One task is registered for each `--schedule=<frequency>` option. To
|
||||||
|
inspect how the XML format describes each schedule, open one of these
|
||||||
|
`.plist` files in an editor and inspect the `<array>` element following
|
||||||
|
the `<key>StartCalendarInterval</key>` element.
|
||||||
|
|
||||||
|
`git maintenance start` will overwrite these files and register the
|
||||||
|
tasks again with `launchctl`, so any customizations should be done by
|
||||||
|
creating your own `.plist` files with distinct names. Similarly, the
|
||||||
|
`git maintenance stop` command will unregister the tasks with `launchctl`
|
||||||
|
and delete the `.plist` files.
|
||||||
|
|
||||||
|
To create more advanced customizations to your background tasks, see
|
||||||
|
launchctl.plist(5) for more information.
|
||||||
|
|
||||||
|
|
||||||
|
BACKGROUND MAINTENANCE ON WINDOWS SYSTEMS
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
Windows does not support `cron` and instead has its own system for
|
||||||
|
scheduling background tasks. The `git maintenance start` command uses
|
||||||
|
the `schtasks` command to submit tasks to this system. You can inspect
|
||||||
|
all background tasks using the Task Scheduler application. The tasks
|
||||||
|
added by Git have names of the form `Git Maintenance (<frequency>)`.
|
||||||
|
The Task Scheduler GUI has ways to inspect these tasks, but you can also
|
||||||
|
export the tasks to XML files and view the details there.
|
||||||
|
|
||||||
|
Note that since Git is a console application, these background tasks
|
||||||
|
create a console window visible to the current user. This can be changed
|
||||||
|
manually by selecting the "Run whether user is logged in or not" option
|
||||||
|
in Task Scheduler. This change requires a password input, which is why
|
||||||
|
`git maintenance start` does not select it by default.
|
||||||
|
|
||||||
|
If you want to customize the background tasks, please rename the tasks
|
||||||
|
so future calls to `git maintenance (start|stop)` do not overwrite your
|
||||||
|
custom tasks.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/maintenance.adoc[]
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
247
app/src/main/assets/manpages/git-merge-base.txt
Normal file
247
app/src/main/assets/manpages/git-merge-base.txt
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
git-merge-base(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-merge-base - Find as good common ancestors as possible for a merge
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git merge-base' [-a | --all] <commit> <commit>...
|
||||||
|
'git merge-base' [-a | --all] --octopus <commit>...
|
||||||
|
'git merge-base' --is-ancestor <commit> <commit>
|
||||||
|
'git merge-base' --independent <commit>...
|
||||||
|
'git merge-base' --fork-point <ref> [<commit>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
'git merge-base' finds the best common ancestor(s) between two commits to use
|
||||||
|
in a three-way merge. One common ancestor is 'better' than another common
|
||||||
|
ancestor if the latter is an ancestor of the former. A common ancestor
|
||||||
|
that does not have any better common ancestor is a 'best common
|
||||||
|
ancestor', i.e. a 'merge base'. Note that there can be more than one
|
||||||
|
merge base for a pair of commits.
|
||||||
|
|
||||||
|
OPERATION MODES
|
||||||
|
---------------
|
||||||
|
|
||||||
|
In the most common special case, specifying only two commits on the
|
||||||
|
command line means computing the merge base between the given two commits.
|
||||||
|
|
||||||
|
More generally, among the two commits to compute the merge base from,
|
||||||
|
one is specified by the first commit argument on the command line;
|
||||||
|
the other commit is a (possibly hypothetical) commit that is a merge
|
||||||
|
across all the remaining commits on the command line.
|
||||||
|
|
||||||
|
As a consequence, the 'merge base' is not necessarily contained in each of the
|
||||||
|
commit arguments if more than two commits are specified. This is different
|
||||||
|
from linkgit:git-show-branch[1] when used with the `--merge-base` option.
|
||||||
|
|
||||||
|
--octopus::
|
||||||
|
Compute the best common ancestors of all supplied commits,
|
||||||
|
in preparation for an n-way merge. This mimics the behavior
|
||||||
|
of 'git show-branch --merge-base'.
|
||||||
|
|
||||||
|
--independent::
|
||||||
|
Instead of printing merge bases, print a minimal subset of
|
||||||
|
the supplied commits with the same ancestors. In other words,
|
||||||
|
among the commits given, list those which cannot be reached
|
||||||
|
from any other. This mimics the behavior of 'git show-branch
|
||||||
|
--independent'.
|
||||||
|
|
||||||
|
--is-ancestor::
|
||||||
|
Check if the first <commit> is an ancestor of the second <commit>,
|
||||||
|
and exit with status 0 if true, or with status 1 if not.
|
||||||
|
Errors are signaled by a non-zero status that is not 1.
|
||||||
|
|
||||||
|
--fork-point::
|
||||||
|
Find the point at which a branch (or any history that leads
|
||||||
|
to <commit>) forked from another branch (or any reference)
|
||||||
|
<ref>. This does not just look for the common ancestor of
|
||||||
|
the two commits, but also takes into account the reflog of
|
||||||
|
<ref> to see if the history leading to <commit> forked from
|
||||||
|
an earlier incarnation of the branch <ref> (see discussion
|
||||||
|
of this mode below).
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-a::
|
||||||
|
--all::
|
||||||
|
Output all merge bases for the commits, instead of just one.
|
||||||
|
|
||||||
|
DISCUSSION
|
||||||
|
----------
|
||||||
|
|
||||||
|
Given two commits 'A' and 'B', `git merge-base A B` will output a commit
|
||||||
|
which is reachable from both 'A' and 'B' through the parent relationship.
|
||||||
|
|
||||||
|
For example, with this topology:
|
||||||
|
|
||||||
|
....
|
||||||
|
o---o---o---B
|
||||||
|
/
|
||||||
|
---o---1---o---o---o---A
|
||||||
|
....
|
||||||
|
|
||||||
|
the merge base between 'A' and 'B' is '1'.
|
||||||
|
|
||||||
|
Given three commits 'A', 'B', and 'C', `git merge-base A B C` will compute the
|
||||||
|
merge base between 'A' and a hypothetical commit 'M', which is a merge
|
||||||
|
between 'B' and 'C'. For example, with this topology:
|
||||||
|
|
||||||
|
....
|
||||||
|
o---o---o---o---C
|
||||||
|
/
|
||||||
|
/ o---o---o---B
|
||||||
|
/ /
|
||||||
|
---2---1---o---o---o---A
|
||||||
|
....
|
||||||
|
|
||||||
|
the result of `git merge-base A B C` is '1'. This is because the
|
||||||
|
equivalent topology with a merge commit 'M' between 'B' and 'C' is:
|
||||||
|
|
||||||
|
|
||||||
|
....
|
||||||
|
o---o---o---o---o
|
||||||
|
/ \
|
||||||
|
/ o---o---o---o---M
|
||||||
|
/ /
|
||||||
|
---2---1---o---o---o---A
|
||||||
|
....
|
||||||
|
|
||||||
|
and the result of `git merge-base A M` is '1'. Commit '2' is also a
|
||||||
|
common ancestor between 'A' and 'M', but '1' is a better common ancestor,
|
||||||
|
because '2' is an ancestor of '1'. Hence, '2' is not a merge base.
|
||||||
|
|
||||||
|
The result of `git merge-base --octopus A B C` is '2', because '2' is
|
||||||
|
the best common ancestor of all commits.
|
||||||
|
|
||||||
|
When the history involves criss-cross merges, there can be more than one
|
||||||
|
'best' common ancestor for two commits. For example, with this topology:
|
||||||
|
|
||||||
|
....
|
||||||
|
---1---o---A
|
||||||
|
\ /
|
||||||
|
X
|
||||||
|
/ \
|
||||||
|
---2---o---o---B
|
||||||
|
....
|
||||||
|
|
||||||
|
both '1' and '2' are merge bases of A and B. Neither one is better than
|
||||||
|
the other (both are 'best' merge bases). When the `--all` option is not given,
|
||||||
|
it is unspecified which best one is output.
|
||||||
|
|
||||||
|
A common idiom to check "fast-forward-ness" between two commits A
|
||||||
|
and B is (or at least used to be) to compute the merge base between
|
||||||
|
A and B, and check if it is the same as A, in which case, A is an
|
||||||
|
ancestor of B. You will see this idiom used often in older scripts.
|
||||||
|
|
||||||
|
....
|
||||||
|
A=$(git rev-parse --verify A)
|
||||||
|
if test "$A" = "$(git merge-base A B)"
|
||||||
|
then
|
||||||
|
... A is an ancestor of B ...
|
||||||
|
fi
|
||||||
|
....
|
||||||
|
|
||||||
|
In modern git, you can say this in a more direct way:
|
||||||
|
|
||||||
|
....
|
||||||
|
if git merge-base --is-ancestor A B
|
||||||
|
then
|
||||||
|
... A is an ancestor of B ...
|
||||||
|
fi
|
||||||
|
....
|
||||||
|
|
||||||
|
instead.
|
||||||
|
|
||||||
|
Discussion on fork-point mode
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
After working on the `topic` branch created with `git switch -c
|
||||||
|
topic origin/master`, the history of remote-tracking branch
|
||||||
|
`origin/master` may have been rewound and rebuilt, leading to a
|
||||||
|
history of this shape:
|
||||||
|
|
||||||
|
....
|
||||||
|
o---B2
|
||||||
|
/
|
||||||
|
---o---o---B1--o---o---o---B (origin/master)
|
||||||
|
\
|
||||||
|
B0
|
||||||
|
\
|
||||||
|
D0---D1---D (topic)
|
||||||
|
....
|
||||||
|
|
||||||
|
where `origin/master` used to point at commits B0, B1, B2 and now it
|
||||||
|
points at B, and your `topic` branch was started on top of it back
|
||||||
|
when `origin/master` was at B0, and you built three commits, D0, D1,
|
||||||
|
and D, on top of it. Imagine that you now want to rebase the work
|
||||||
|
you did on the topic on top of the updated origin/master.
|
||||||
|
|
||||||
|
In such a case, `git merge-base origin/master topic` would return the
|
||||||
|
parent of B0 in the above picture, but B0^..D is *not* the range of
|
||||||
|
commits you would want to replay on top of B (it includes B0, which
|
||||||
|
is not what you wrote; it is a commit the other side discarded when
|
||||||
|
it moved its tip from B0 to B1).
|
||||||
|
|
||||||
|
`git merge-base --fork-point origin/master topic` is designed to
|
||||||
|
help in such a case. It takes not only B but also B0, B1, and B2
|
||||||
|
(i.e. old tips of the remote-tracking branches your repository's
|
||||||
|
reflog knows about) into account to see on which commit your topic
|
||||||
|
branch was built and finds B0, allowing you to replay only the
|
||||||
|
commits on your topic, excluding the commits the other side later
|
||||||
|
discarded.
|
||||||
|
|
||||||
|
Hence
|
||||||
|
|
||||||
|
$ fork_point=$(git merge-base --fork-point origin/master topic)
|
||||||
|
|
||||||
|
will find B0, and
|
||||||
|
|
||||||
|
$ git rebase --onto origin/master $fork_point topic
|
||||||
|
|
||||||
|
will replay D0, D1, and D on top of B to create a new history of this
|
||||||
|
shape:
|
||||||
|
|
||||||
|
....
|
||||||
|
o---B2
|
||||||
|
/
|
||||||
|
---o---o---B1--o---o---o---B (origin/master)
|
||||||
|
\ \
|
||||||
|
B0 D0'--D1'--D' (topic - updated)
|
||||||
|
\
|
||||||
|
D0---D1---D (topic - old)
|
||||||
|
....
|
||||||
|
|
||||||
|
A caveat is that older reflog entries in your repository may be
|
||||||
|
expired by `git gc`. If B0 no longer appears in the reflog of the
|
||||||
|
remote-tracking branch `origin/master`, the `--fork-point` mode
|
||||||
|
obviously cannot find it and fails, avoiding to give a random and
|
||||||
|
useless result (such as the parent of B0, like the same command
|
||||||
|
without the `--fork-point` option gives).
|
||||||
|
|
||||||
|
Also, the remote-tracking branch you use the `--fork-point` mode
|
||||||
|
with must be the one your topic forked from its tip. If you forked
|
||||||
|
from an older commit than the tip, this mode would not find the fork
|
||||||
|
point (imagine in the above sample history B0 did not exist,
|
||||||
|
origin/master started at B1, moved to B2 and then B, and you forked
|
||||||
|
your topic at origin/master^ when origin/master was B1; the shape of
|
||||||
|
the history would be the same as above, without B0, and the parent
|
||||||
|
of B1 is what `git merge-base origin/master topic` correctly finds,
|
||||||
|
but the `--fork-point` mode will not, because it is not one of the
|
||||||
|
commits that used to be at the tip of origin/master).
|
||||||
|
|
||||||
|
|
||||||
|
See also
|
||||||
|
--------
|
||||||
|
linkgit:git-rev-list[1],
|
||||||
|
linkgit:git-show-branch[1],
|
||||||
|
linkgit:git-merge[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
125
app/src/main/assets/manpages/git-merge-file.txt
Normal file
125
app/src/main/assets/manpages/git-merge-file.txt
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
git-merge-file(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-merge-file - Run a three-way file merge
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git merge-file' [-L <current-name> [-L <base-name> [-L <other-name>]]]
|
||||||
|
[--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>]
|
||||||
|
[--[no-]diff3] [--object-id] <current> <base> <other>
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Given three files `<current>`, `<base>` and `<other>`,
|
||||||
|
'git merge-file' incorporates all changes that lead from `<base>`
|
||||||
|
to `<other>` into `<current>`. The result ordinarily goes into
|
||||||
|
`<current>`. 'git merge-file' is useful for combining separate changes
|
||||||
|
to an original. Suppose `<base>` is the original, and both
|
||||||
|
`<current>` and `<other>` are modifications of `<base>`,
|
||||||
|
then 'git merge-file' combines both changes.
|
||||||
|
|
||||||
|
A conflict occurs if both `<current>` and `<other>` have changes
|
||||||
|
in a common segment of lines. If a conflict is found, 'git merge-file'
|
||||||
|
normally outputs a warning and brackets the conflict with lines containing
|
||||||
|
<<<<<<< and >>>>>>> markers. A typical conflict will look like this:
|
||||||
|
|
||||||
|
<<<<<<< A
|
||||||
|
lines in file A
|
||||||
|
=======
|
||||||
|
lines in file B
|
||||||
|
>>>>>>> B
|
||||||
|
|
||||||
|
If there are conflicts, the user should edit the result and delete one of
|
||||||
|
the alternatives. When `--ours`, `--theirs`, or `--union` option is in effect,
|
||||||
|
however, these conflicts are resolved favouring lines from `<current>`,
|
||||||
|
lines from `<other>`, or lines from both respectively. The length of the
|
||||||
|
conflict markers can be given with the `--marker-size` option.
|
||||||
|
|
||||||
|
If `--object-id` is specified, exactly the same behavior occurs, except that
|
||||||
|
instead of specifying what to merge as files, it is specified as a list of
|
||||||
|
object IDs referring to blobs.
|
||||||
|
|
||||||
|
The exit value of this program is negative on error, and the number of
|
||||||
|
conflicts otherwise (truncated to 127 if there are more than that many
|
||||||
|
conflicts). If the merge was clean, the exit value is 0.
|
||||||
|
|
||||||
|
'git merge-file' is designed to be a minimal clone of RCS 'merge'; that is, it
|
||||||
|
implements all of RCS 'merge''s functionality which is needed by
|
||||||
|
linkgit:git[1].
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--object-id::
|
||||||
|
Specify the contents to merge as blobs in the current repository instead of
|
||||||
|
files. In this case, the operation must take place within a valid repository.
|
||||||
|
+
|
||||||
|
If the `-p` option is specified, the merged file (including conflicts, if any)
|
||||||
|
goes to standard output as normal; otherwise, the merged file is written to the
|
||||||
|
object store and the object ID of its blob is written to standard output.
|
||||||
|
|
||||||
|
-L <label>::
|
||||||
|
This option may be given up to three times, and
|
||||||
|
specifies labels to be used in place of the
|
||||||
|
corresponding file names in conflict reports. That is,
|
||||||
|
`git merge-file -L x -L y -L z a b c` generates output that
|
||||||
|
looks like it came from files x, y and z instead of
|
||||||
|
from files a, b and c.
|
||||||
|
|
||||||
|
-p::
|
||||||
|
Send results to standard output instead of overwriting
|
||||||
|
`<current>`.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
Quiet; do not warn about conflicts.
|
||||||
|
|
||||||
|
--diff3::
|
||||||
|
Show conflicts in "diff3" style.
|
||||||
|
|
||||||
|
--zdiff3::
|
||||||
|
Show conflicts in "zdiff3" style.
|
||||||
|
+
|
||||||
|
The `--diff3` and `--zdiff3` options default to the value of the
|
||||||
|
`merge.conflictStyle` configuration variable (see linkgit:git-config[1]).
|
||||||
|
|
||||||
|
--ours::
|
||||||
|
--theirs::
|
||||||
|
--union::
|
||||||
|
Instead of leaving conflicts in the file, resolve conflicts
|
||||||
|
favouring our (or their or both) side of the lines.
|
||||||
|
|
||||||
|
--diff-algorithm={patience|minimal|histogram|myers}::
|
||||||
|
Use a different diff algorithm while merging. The current default is "myers",
|
||||||
|
but selecting more recent algorithm such as "histogram" can help
|
||||||
|
avoid mismerges that occur due to unimportant matching lines
|
||||||
|
(such as braces from distinct functions). See also
|
||||||
|
linkgit:git-diff[1] `--diff-algorithm`.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
`git merge-file README.my README README.upstream`::
|
||||||
|
|
||||||
|
combines the changes of README.my and README.upstream since README,
|
||||||
|
tries to merge them and writes the result into README.my.
|
||||||
|
|
||||||
|
`git merge-file -L a -L b -L c tmp/a123 tmp/b234 tmp/c345`::
|
||||||
|
|
||||||
|
merges tmp/a123 and tmp/c345 with the base tmp/b234, but uses labels
|
||||||
|
`a` and `c` instead of `tmp/a123` and `tmp/c345`.
|
||||||
|
|
||||||
|
`git merge-file -p --object-id abc1234 def567 890abcd`::
|
||||||
|
|
||||||
|
combines the changes of the blob abc1234 and 890abcd since def567,
|
||||||
|
tries to merge them and writes the result to standard output
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
83
app/src/main/assets/manpages/git-merge-index.txt
Normal file
83
app/src/main/assets/manpages/git-merge-index.txt
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
git-merge-index(1)
|
||||||
|
==================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-merge-index - Run a merge for files needing merging
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git merge-index' [-o] [-q] <merge-program> (-a | ( [--] <file>...) )
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This looks up the <file>(s) in the index and, if there are any merge
|
||||||
|
entries, passes the SHA-1 hash for those files as arguments 1, 2, 3 (empty
|
||||||
|
argument if no file), and <file> as argument 4. File modes for the three
|
||||||
|
files are passed as arguments 5, 6 and 7.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
\--::
|
||||||
|
Do not interpret any more arguments as options.
|
||||||
|
|
||||||
|
-a::
|
||||||
|
Run merge against all files in the index that need merging.
|
||||||
|
|
||||||
|
-o::
|
||||||
|
Instead of stopping at the first failed merge, do all of them
|
||||||
|
in one shot - continue with merging even when previous merges
|
||||||
|
returned errors, and only return the error code after all the
|
||||||
|
merges.
|
||||||
|
|
||||||
|
-q::
|
||||||
|
Do not complain about a failed merge program (a merge program
|
||||||
|
failure usually indicates conflicts during the merge). This is for
|
||||||
|
porcelains which might want to emit custom messages.
|
||||||
|
|
||||||
|
If 'git merge-index' is called with multiple <file>s (or -a) then it
|
||||||
|
processes them in turn only stopping if merge returns a non-zero exit
|
||||||
|
code.
|
||||||
|
|
||||||
|
Typically this is run with a script calling Git's imitation of
|
||||||
|
the 'merge' command from the RCS package.
|
||||||
|
|
||||||
|
A sample script called 'git merge-one-file' is included in the
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
ALERT ALERT ALERT! The Git "merge object order" is different from the
|
||||||
|
RCS 'merge' program merge object order. In the above ordering, the
|
||||||
|
original is first. But the argument order to the 3-way merge program
|
||||||
|
'merge' is to have the original in the middle. Don't ask me why.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
----
|
||||||
|
torvalds@ppc970:~/merge-test> git merge-index cat MM
|
||||||
|
This is MM from the original tree. # original
|
||||||
|
This is modified MM in the branch A. # merge1
|
||||||
|
This is modified MM in the branch B. # merge2
|
||||||
|
This is modified MM in the branch B. # current contents
|
||||||
|
----
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
----
|
||||||
|
torvalds@ppc970:~/merge-test> git merge-index cat AA MM
|
||||||
|
cat: : No such file or directory
|
||||||
|
This is added AA in the branch A.
|
||||||
|
This is added AA in the branch B.
|
||||||
|
This is added AA in the branch B.
|
||||||
|
fatal: merge program failed
|
||||||
|
----
|
||||||
|
|
||||||
|
where the latter example shows how 'git merge-index' will stop trying to
|
||||||
|
merge once anything has returned an error (i.e., `cat` returned an error
|
||||||
|
for the AA file, because it didn't exist in the original, and thus
|
||||||
|
'git merge-index' didn't even try to merge the MM thing).
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
21
app/src/main/assets/manpages/git-merge-one-file.txt
Normal file
21
app/src/main/assets/manpages/git-merge-one-file.txt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
git-merge-one-file(1)
|
||||||
|
=====================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-merge-one-file - The standard helper program to use with git-merge-index
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git merge-one-file'
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This is the standard helper program to use with 'git merge-index'
|
||||||
|
to resolve a merge after the trivial merge done with 'git read-tree -m'.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
348
app/src/main/assets/manpages/git-merge-tree.txt
Normal file
348
app/src/main/assets/manpages/git-merge-tree.txt
Normal file
@@ -0,0 +1,348 @@
|
|||||||
|
git-merge-tree(1)
|
||||||
|
=================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-merge-tree - Perform merge without touching index or working tree
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git merge-tree' [--write-tree] [<options>] <branch1> <branch2>
|
||||||
|
'git merge-tree' [--trivial-merge] <base-tree> <branch1> <branch2> (deprecated)
|
||||||
|
|
||||||
|
[[NEWMERGE]]
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This command has a modern `--write-tree` mode and a deprecated
|
||||||
|
`--trivial-merge` mode. With the exception of the
|
||||||
|
<<DEPMERGE,DEPRECATED DESCRIPTION>> section at the end, the rest of
|
||||||
|
this documentation describes the modern `--write-tree` mode.
|
||||||
|
|
||||||
|
Performs a merge, but does not make any new commits and does not read
|
||||||
|
from or write to either the working tree or index.
|
||||||
|
|
||||||
|
The performed merge will use the same features as the "real"
|
||||||
|
linkgit:git-merge[1], including:
|
||||||
|
|
||||||
|
* three way content merges of individual files
|
||||||
|
* rename detection
|
||||||
|
* proper directory/file conflict handling
|
||||||
|
* recursive ancestor consolidation (i.e. when there is more than one
|
||||||
|
merge base, creating a virtual merge base by merging the merge bases)
|
||||||
|
* etc.
|
||||||
|
|
||||||
|
After the merge completes, a new toplevel tree object is created. See
|
||||||
|
`OUTPUT` below for details.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--stdin::
|
||||||
|
Read the commits to merge from the standard input rather than
|
||||||
|
the command-line. See <<INPUT,INPUT FORMAT>> below for more
|
||||||
|
information. Implies `-z`.
|
||||||
|
|
||||||
|
-z::
|
||||||
|
Do not quote filenames in the <Conflicted file info> section,
|
||||||
|
and end each filename with a NUL character rather than
|
||||||
|
newline. Also begin the messages section with a NUL character
|
||||||
|
instead of a newline. See <<OUTPUT,OUTPUT>> below for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
--name-only::
|
||||||
|
In the Conflicted file info section, instead of writing a list
|
||||||
|
of (mode, oid, stage, path) tuples to output for conflicted
|
||||||
|
files, just provide a list of filenames with conflicts (and
|
||||||
|
do not list filenames multiple times if they have multiple
|
||||||
|
conflicting stages).
|
||||||
|
|
||||||
|
--messages::
|
||||||
|
--no-messages::
|
||||||
|
Write any informational messages such as "Auto-merging <path>"
|
||||||
|
or CONFLICT notices to the end of stdout. If unspecified, the
|
||||||
|
default is to include these messages if there are merge
|
||||||
|
conflicts, and to omit them otherwise.
|
||||||
|
|
||||||
|
--quiet::
|
||||||
|
Disable all output from the program. Useful when you are only
|
||||||
|
interested in the exit status. Allows merge-tree to exit
|
||||||
|
early when it finds a conflict, and allows it to avoid writing
|
||||||
|
most objects created by merges.
|
||||||
|
|
||||||
|
--allow-unrelated-histories::
|
||||||
|
merge-tree will by default error out if the two branches specified
|
||||||
|
share no common history. This flag can be given to override that
|
||||||
|
check and make the merge proceed anyway.
|
||||||
|
|
||||||
|
--merge-base=<tree-ish>::
|
||||||
|
Instead of finding the merge-bases for <branch1> and <branch2>,
|
||||||
|
specify a merge-base for the merge. This option is incompatible with
|
||||||
|
`--stdin`.
|
||||||
|
+
|
||||||
|
Specifying multiple bases is currently not supported, which means that when
|
||||||
|
merging two branches with more than one merge-base, using this option may
|
||||||
|
cause merge results to differ from what `git merge` would compute. This
|
||||||
|
can include potentially losing some changes made on one side of the history
|
||||||
|
in the resulting merge.
|
||||||
|
+
|
||||||
|
With this option, since the merge-base is provided directly, <branch1> and
|
||||||
|
<branch2> do not need to specify commits; trees are enough.
|
||||||
|
|
||||||
|
-X<option>::
|
||||||
|
--strategy-option=<option>::
|
||||||
|
Pass the merge strategy-specific option through to the merge strategy.
|
||||||
|
See linkgit:git-merge[1] for details.
|
||||||
|
|
||||||
|
[[OUTPUT]]
|
||||||
|
OUTPUT
|
||||||
|
------
|
||||||
|
|
||||||
|
For a successful merge, the output from git-merge-tree is simply one
|
||||||
|
line:
|
||||||
|
|
||||||
|
<OID of toplevel tree>
|
||||||
|
|
||||||
|
Whereas for a conflicted merge, the output is by default of the form:
|
||||||
|
|
||||||
|
<OID of toplevel tree>
|
||||||
|
<Conflicted file info>
|
||||||
|
<Informational messages>
|
||||||
|
|
||||||
|
These are discussed individually below.
|
||||||
|
|
||||||
|
However, there is an exception. If `--stdin` is passed, then there is
|
||||||
|
an extra section at the beginning, a NUL character at the end, and then
|
||||||
|
all the sections repeat for each line of input. Thus, if the first merge
|
||||||
|
is conflicted and the second is clean, the output would be of the form:
|
||||||
|
|
||||||
|
<Merge status>
|
||||||
|
<OID of toplevel tree>
|
||||||
|
<Conflicted file info>
|
||||||
|
<Informational messages>
|
||||||
|
NUL
|
||||||
|
<Merge status>
|
||||||
|
<OID of toplevel tree>
|
||||||
|
NUL
|
||||||
|
|
||||||
|
[[MS]]
|
||||||
|
Merge status
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This is an integer status followed by a NUL character. The integer status is:
|
||||||
|
|
||||||
|
0: merge had conflicts
|
||||||
|
1: merge was clean
|
||||||
|
|
||||||
|
[[OIDTLT]]
|
||||||
|
OID of toplevel tree
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This is a tree object that represents what would be checked out in the
|
||||||
|
working tree at the end of `git merge`. If there were conflicts, then
|
||||||
|
files within this tree may have embedded conflict markers. This section
|
||||||
|
is always followed by a newline (or NUL if `-z` is passed).
|
||||||
|
|
||||||
|
[[CFI]]
|
||||||
|
Conflicted file info
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This is a sequence of lines with the format
|
||||||
|
|
||||||
|
<mode> <object> <stage> <filename>
|
||||||
|
|
||||||
|
The filename will be quoted as explained for the configuration
|
||||||
|
variable `core.quotePath` (see linkgit:git-config[1]). However, if
|
||||||
|
the `--name-only` option is passed, the mode, object, and stage will
|
||||||
|
be omitted. If `-z` is passed, the "lines" are terminated by a NUL
|
||||||
|
character instead of a newline character.
|
||||||
|
|
||||||
|
[[IM]]
|
||||||
|
Informational messages
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This section provides informational messages, typically about
|
||||||
|
conflicts. The format of the section varies significantly depending
|
||||||
|
on whether `-z` is passed.
|
||||||
|
|
||||||
|
If `-z` is passed:
|
||||||
|
|
||||||
|
The output format is zero or more conflict informational records, each
|
||||||
|
of the form:
|
||||||
|
|
||||||
|
<list-of-paths><conflict-type>NUL<conflict-message>NUL
|
||||||
|
|
||||||
|
where <list-of-paths> is of the form
|
||||||
|
|
||||||
|
<number-of-paths>NUL<path1>NUL<path2>NUL...<pathN>NUL
|
||||||
|
|
||||||
|
and includes paths (or branch names) affected by the conflict or
|
||||||
|
informational message in <conflict-message>. Also, <conflict-type> is a
|
||||||
|
stable string explaining the type of conflict, such as
|
||||||
|
|
||||||
|
* "Auto-merging"
|
||||||
|
* "CONFLICT (rename/delete)"
|
||||||
|
* "CONFLICT (submodule lacks merge base)"
|
||||||
|
* "CONFLICT (binary)"
|
||||||
|
|
||||||
|
and <conflict-message> is a more detailed message about the conflict which often
|
||||||
|
(but not always) embeds the <stable-short-type-description> within it. These
|
||||||
|
strings may change in future Git versions. Some examples:
|
||||||
|
|
||||||
|
* "Auto-merging <file>"
|
||||||
|
* "CONFLICT (rename/delete): <oldfile> renamed...but deleted in..."
|
||||||
|
* "Failed to merge submodule <submodule> (no merge base)"
|
||||||
|
* "Warning: cannot merge binary files: <filename>"
|
||||||
|
|
||||||
|
If `-z` is NOT passed:
|
||||||
|
|
||||||
|
This section starts with a blank line to separate it from the previous
|
||||||
|
sections, and then only contains the <conflict-message> information
|
||||||
|
from the previous section (separated by newlines). These are
|
||||||
|
non-stable strings that should not be parsed by scripts, and are just
|
||||||
|
meant for human consumption. Also, note that while <conflict-message>
|
||||||
|
strings usually do not contain embedded newlines, they sometimes do.
|
||||||
|
(However, the free-form messages will never have an embedded NUL
|
||||||
|
character). So, the entire block of information is meant for human
|
||||||
|
readers as an agglomeration of all conflict messages.
|
||||||
|
|
||||||
|
EXIT STATUS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
For a successful, non-conflicted merge, the exit status is 0. When the
|
||||||
|
merge has conflicts, the exit status is 1. If the merge is not able to
|
||||||
|
complete (or start) due to some kind of error, the exit status is
|
||||||
|
something other than 0 or 1 (and the output is unspecified). When
|
||||||
|
--stdin is passed, the return status is 0 for both successful and
|
||||||
|
conflicted merges, and something other than 0 or 1 if it cannot complete
|
||||||
|
all the requested merges.
|
||||||
|
|
||||||
|
USAGE NOTES
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This command is intended as low-level plumbing, similar to
|
||||||
|
linkgit:git-hash-object[1], linkgit:git-mktree[1],
|
||||||
|
linkgit:git-commit-tree[1], linkgit:git-write-tree[1],
|
||||||
|
linkgit:git-update-ref[1], and linkgit:git-mktag[1]. Thus, it can be
|
||||||
|
used as a part of a series of steps such as:
|
||||||
|
|
||||||
|
vi message.txt
|
||||||
|
BRANCH1=refs/heads/test
|
||||||
|
BRANCH2=main
|
||||||
|
NEWTREE=$(git merge-tree --write-tree $BRANCH1 $BRANCH2) || {
|
||||||
|
echo "There were conflicts..." 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
NEWCOMMIT=$(git commit-tree $NEWTREE -F message.txt \
|
||||||
|
-p $BRANCH1 -p $BRANCH2)
|
||||||
|
git update-ref $BRANCH1 $NEWCOMMIT
|
||||||
|
|
||||||
|
Note that when the exit status is non-zero, `NEWTREE` in this sequence
|
||||||
|
will contain a lot more output than just a tree.
|
||||||
|
|
||||||
|
For conflicts, the output includes the same information that you'd get
|
||||||
|
with linkgit:git-merge[1]:
|
||||||
|
|
||||||
|
* what would be written to the working tree (the
|
||||||
|
<<OIDTLT,OID of toplevel tree>>)
|
||||||
|
* the higher order stages that would be written to the index (the
|
||||||
|
<<CFI,Conflicted file info>>)
|
||||||
|
* any messages that would have been printed to stdout (the
|
||||||
|
<<IM,Informational messages>>)
|
||||||
|
|
||||||
|
[[INPUT]]
|
||||||
|
INPUT FORMAT
|
||||||
|
------------
|
||||||
|
'git merge-tree --stdin' input format is fully text based. Each line
|
||||||
|
has this format:
|
||||||
|
|
||||||
|
[<base-commit> -- ]<branch1> <branch2>
|
||||||
|
|
||||||
|
If one line is separated by `--`, the string before the separator is
|
||||||
|
used for specifying a merge-base for the merge and the string after
|
||||||
|
the separator describes the branches to be merged.
|
||||||
|
|
||||||
|
MISTAKES TO AVOID
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Do NOT look through the resulting toplevel tree to try to find which
|
||||||
|
files conflict; parse the <<CFI,Conflicted file info>> section instead.
|
||||||
|
Not only would parsing an entire tree be horrendously slow in large
|
||||||
|
repositories, there are numerous types of conflicts not representable by
|
||||||
|
conflict markers (modify/delete, mode conflict, binary file changed on
|
||||||
|
both sides, file/directory conflicts, various rename conflict
|
||||||
|
permutations, etc.)
|
||||||
|
|
||||||
|
Do NOT interpret an empty <<CFI,Conflicted file info>> list as a clean
|
||||||
|
merge; check the exit status. A merge can have conflicts without having
|
||||||
|
individual files conflict (there are a few types of directory rename
|
||||||
|
conflicts that fall into this category, and others might also be added
|
||||||
|
in the future).
|
||||||
|
|
||||||
|
Do NOT attempt to guess or make the user guess the conflict types from
|
||||||
|
the <<CFI,Conflicted file info>> list. The information there is
|
||||||
|
insufficient to do so. For example: Rename/rename(1to2) conflicts (both
|
||||||
|
sides renamed the same file differently) will result in three different
|
||||||
|
files having higher order stages (but each only has one higher order
|
||||||
|
stage), with no way (short of the <<IM,Informational messages>> section)
|
||||||
|
to determine which three files are related. File/directory conflicts
|
||||||
|
also result in a file with exactly one higher order stage.
|
||||||
|
Possibly-involved-in-directory-rename conflicts (when
|
||||||
|
"merge.directoryRenames" is unset or set to "conflicts") also result in
|
||||||
|
a file with exactly one higher order stage. In all cases, the
|
||||||
|
<<IM,Informational messages>> section has the necessary info, though it
|
||||||
|
is not designed to be machine parseable.
|
||||||
|
|
||||||
|
Do NOT assume that each path from <<CFI,Conflicted file info>>, and
|
||||||
|
the logical conflicts in the <<IM,Informational messages>> have a
|
||||||
|
one-to-one mapping, nor that there is a one-to-many mapping, nor a
|
||||||
|
many-to-one mapping. Many-to-many mappings exist, meaning that each
|
||||||
|
path can have many logical conflict types in a single merge, and each
|
||||||
|
logical conflict type can affect many paths.
|
||||||
|
|
||||||
|
Do NOT assume all filenames listed in the <<IM,Informational messages>>
|
||||||
|
section had conflicts. Messages can be included for files that have no
|
||||||
|
conflicts, such as "Auto-merging <file>".
|
||||||
|
|
||||||
|
AVOID taking the OIDS from the <<CFI,Conflicted file info>> and
|
||||||
|
re-merging them to present the conflicts to the user. This will lose
|
||||||
|
information. Instead, look up the version of the file found within the
|
||||||
|
<<OIDTLT,OID of toplevel tree>> and show that instead. In particular,
|
||||||
|
the latter will have conflict markers annotated with the original
|
||||||
|
branch/commit being merged and, if renames were involved, the original
|
||||||
|
filename. While you could include the original branch/commit in the
|
||||||
|
conflict marker annotations when re-merging, the original filename is
|
||||||
|
not available from the <<CFI,Conflicted file info>> and thus you would
|
||||||
|
be losing information that might help the user resolve the conflict.
|
||||||
|
|
||||||
|
[[DEPMERGE]]
|
||||||
|
DEPRECATED DESCRIPTION
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Per the <<NEWMERGE,DESCRIPTION>> and unlike the rest of this
|
||||||
|
documentation, this section describes the deprecated `--trivial-merge`
|
||||||
|
mode.
|
||||||
|
|
||||||
|
Other than the optional `--trivial-merge`, this mode accepts no
|
||||||
|
options.
|
||||||
|
|
||||||
|
This mode reads three tree-ish, and outputs trivial merge results and
|
||||||
|
conflicting stages to the standard output in a semi-diff format.
|
||||||
|
Since this was designed for higher level scripts to consume and merge
|
||||||
|
the results back into the index, it omits entries that match
|
||||||
|
<branch1>. The result of this second form is similar to what
|
||||||
|
three-way 'git read-tree -m' does, but instead of storing the results
|
||||||
|
in the index, the command outputs the entries to the standard output.
|
||||||
|
|
||||||
|
This form not only has limited applicability (a trivial merge cannot
|
||||||
|
handle content merges of individual files, rename detection, proper
|
||||||
|
directory/file conflict handling, etc.), the output format is also
|
||||||
|
difficult to work with, and it will generally be less performant than
|
||||||
|
the first form even on successful merges (especially if working in
|
||||||
|
large repositories).
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
412
app/src/main/assets/manpages/git-merge.txt
Normal file
412
app/src/main/assets/manpages/git-merge.txt
Normal file
@@ -0,0 +1,412 @@
|
|||||||
|
git-merge(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-merge - Join two or more development histories together
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git merge [-n] [--stat] [--compact-summary] [--no-commit] [--squash] [--[no-]edit]
|
||||||
|
[--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
|
||||||
|
[--[no-]allow-unrelated-histories]
|
||||||
|
[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>]
|
||||||
|
[--into-name <branch>] [<commit>...]
|
||||||
|
git merge (--continue | --abort | --quit)
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Incorporates changes from the named commits (since the time their
|
||||||
|
histories diverged from the current branch) into the current
|
||||||
|
branch. This command is used by `git pull` to incorporate changes
|
||||||
|
from another repository and can be used by hand to merge changes
|
||||||
|
from one branch into another.
|
||||||
|
|
||||||
|
Assume the following history exists and the current branch is
|
||||||
|
`master`:
|
||||||
|
|
||||||
|
------------
|
||||||
|
A---B---C topic
|
||||||
|
/
|
||||||
|
D---E---F---G master
|
||||||
|
------------
|
||||||
|
|
||||||
|
Then `git merge topic` will replay the changes made on the
|
||||||
|
`topic` branch since it diverged from `master` (i.e., `E`) until
|
||||||
|
its current commit (`C`) on top of `master`, and record the result
|
||||||
|
in a new commit along with the names of the two parent commits and
|
||||||
|
a log message from the user describing the changes. Before the operation,
|
||||||
|
`ORIG_HEAD` is set to the tip of the current branch (`G`).
|
||||||
|
|
||||||
|
------------
|
||||||
|
A---B---C topic
|
||||||
|
/ \
|
||||||
|
D---E---F---G---H master
|
||||||
|
------------
|
||||||
|
|
||||||
|
A merge stops if there's a conflict that cannot be resolved
|
||||||
|
automatically or if `--no-commit` was provided when initiating the
|
||||||
|
merge. At that point you can run `git merge --abort` or `git merge
|
||||||
|
--continue`.
|
||||||
|
|
||||||
|
`git merge --abort` will abort the merge process and try to reconstruct
|
||||||
|
the pre-merge state. However, if there were uncommitted changes when the
|
||||||
|
merge started (and especially if those changes were further modified
|
||||||
|
after the merge was started), `git merge --abort` will in some cases be
|
||||||
|
unable to reconstruct the original (pre-merge) changes. Therefore:
|
||||||
|
|
||||||
|
WARNING: Running `git merge` with non-trivial uncommitted changes is
|
||||||
|
discouraged: while possible, it may leave you in a state that is hard to
|
||||||
|
back out of in the case of a conflict.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
:git-merge: 1
|
||||||
|
|
||||||
|
include::merge-options.adoc[]
|
||||||
|
|
||||||
|
`-m <msg>`::
|
||||||
|
Set the commit message to be used for the merge commit (in
|
||||||
|
case one is created).
|
||||||
|
+
|
||||||
|
If `--log` is specified, a shortlog of the commits being merged
|
||||||
|
will be appended to the specified message.
|
||||||
|
+
|
||||||
|
The `git fmt-merge-msg` command can be
|
||||||
|
used to give a good default for automated `git merge`
|
||||||
|
invocations. The automated message can include the branch description.
|
||||||
|
|
||||||
|
`--into-name <branch>`::
|
||||||
|
Prepare the default merge message as if merging to the branch
|
||||||
|
_<branch>_, instead of the name of the real branch to which
|
||||||
|
the merge is made.
|
||||||
|
|
||||||
|
`-F <file>`::
|
||||||
|
`--file=<file>`::
|
||||||
|
Read the commit message to be used for the merge commit (in
|
||||||
|
case one is created).
|
||||||
|
+
|
||||||
|
If `--log` is specified, a shortlog of the commits being merged
|
||||||
|
will be appended to the specified message.
|
||||||
|
|
||||||
|
include::rerere-options.adoc[]
|
||||||
|
|
||||||
|
`--overwrite-ignore`::
|
||||||
|
`--no-overwrite-ignore`::
|
||||||
|
Silently overwrite ignored files from the merge result. This
|
||||||
|
is the default behavior. Use `--no-overwrite-ignore` to abort.
|
||||||
|
|
||||||
|
`--abort`::
|
||||||
|
Abort the current conflict resolution process, and
|
||||||
|
try to reconstruct the pre-merge state. If an autostash entry is
|
||||||
|
present, apply it to the worktree.
|
||||||
|
+
|
||||||
|
If there were uncommitted worktree changes present when the merge
|
||||||
|
started, `git merge --abort` will in some cases be unable to
|
||||||
|
reconstruct these changes. It is therefore recommended to always
|
||||||
|
commit or stash your changes before running `git merge`.
|
||||||
|
+
|
||||||
|
`git merge --abort` is equivalent to `git reset --merge` when
|
||||||
|
`MERGE_HEAD` is present unless `MERGE_AUTOSTASH` is also present in
|
||||||
|
which case `git merge --abort` applies the stash entry to the worktree
|
||||||
|
whereas `git reset --merge` will save the stashed changes in the stash
|
||||||
|
list.
|
||||||
|
|
||||||
|
`--quit`::
|
||||||
|
Forget about the current merge in progress. Leave the index
|
||||||
|
and the working tree as-is. If `MERGE_AUTOSTASH` is present, the
|
||||||
|
stash entry will be saved to the stash list.
|
||||||
|
|
||||||
|
`--continue`::
|
||||||
|
After a `git merge` stops due to conflicts you can conclude the
|
||||||
|
merge by running `git merge --continue` (see "HOW TO RESOLVE
|
||||||
|
CONFLICTS" section below).
|
||||||
|
|
||||||
|
`<commit>...`::
|
||||||
|
Commits, usually other branch heads, to merge into our branch.
|
||||||
|
Specifying more than one commit will create a merge with
|
||||||
|
more than two parents (affectionately called an Octopus merge).
|
||||||
|
+
|
||||||
|
If no commit is given from the command line, merge the remote-tracking
|
||||||
|
branches that the current branch is configured to use as its upstream.
|
||||||
|
See also the configuration section of this manual page.
|
||||||
|
+
|
||||||
|
When `FETCH_HEAD` (and no other commit) is specified, the branches
|
||||||
|
recorded in the `.git/FETCH_HEAD` file by the previous invocation
|
||||||
|
of `git fetch` for merging are merged to the current branch.
|
||||||
|
|
||||||
|
|
||||||
|
PRE-MERGE CHECKS
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Before applying outside changes, you should get your own work in
|
||||||
|
good shape and committed locally, so it will not be clobbered if
|
||||||
|
there are conflicts. See also linkgit:git-stash[1].
|
||||||
|
`git pull` and `git merge` will stop without doing anything when
|
||||||
|
local uncommitted changes overlap with files that `git pull`/`git
|
||||||
|
merge` may need to update.
|
||||||
|
|
||||||
|
To avoid recording unrelated changes in the merge commit,
|
||||||
|
`git pull` and `git merge` will also abort if there are any changes
|
||||||
|
registered in the index relative to the `HEAD` commit. (Special
|
||||||
|
narrow exceptions to this rule may exist depending on which merge
|
||||||
|
strategy is in use, but generally, the index must match `HEAD`.)
|
||||||
|
|
||||||
|
If all named commits are already ancestors of `HEAD`, `git merge`
|
||||||
|
will exit early with the message "Already up to date."
|
||||||
|
|
||||||
|
FAST-FORWARD MERGE
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Often the current branch head is an ancestor of the named commit.
|
||||||
|
This is the most common case especially when invoked from `git
|
||||||
|
pull`: you are tracking an upstream repository, you have committed
|
||||||
|
no local changes, and now you want to update to a newer upstream
|
||||||
|
revision. In this case, a new commit is not needed to store the
|
||||||
|
combined history; instead, the `HEAD` (along with the index) is
|
||||||
|
updated to point at the named commit, without creating an extra
|
||||||
|
merge commit.
|
||||||
|
|
||||||
|
This behavior can be suppressed with the `--no-ff` option.
|
||||||
|
|
||||||
|
TRUE MERGE
|
||||||
|
----------
|
||||||
|
|
||||||
|
Except in a fast-forward merge (see above), the branches to be
|
||||||
|
merged must be tied together by a merge commit that has both of them
|
||||||
|
as its parents.
|
||||||
|
|
||||||
|
A merged version reconciling the changes from all branches to be
|
||||||
|
merged is committed, and your `HEAD`, index, and working tree are
|
||||||
|
updated to it. It is possible to have modifications in the working
|
||||||
|
tree as long as they do not overlap; the update will preserve them.
|
||||||
|
|
||||||
|
When it is not obvious how to reconcile the changes, the following
|
||||||
|
happens:
|
||||||
|
|
||||||
|
1. The `HEAD` pointer stays the same.
|
||||||
|
2. The `MERGE_HEAD` ref is set to point to the other branch head.
|
||||||
|
3. Paths that merged cleanly are updated both in the index file and
|
||||||
|
in your working tree.
|
||||||
|
4. For conflicting paths, the index file records up to three
|
||||||
|
versions: stage 1 stores the version from the common ancestor,
|
||||||
|
stage 2 from `HEAD`, and stage 3 from `MERGE_HEAD` (you
|
||||||
|
can inspect the stages with `git ls-files -u`). The working
|
||||||
|
tree files contain the result of the merge operation; i.e. 3-way
|
||||||
|
merge results with familiar conflict markers +<<<+ `===` +>>>+.
|
||||||
|
5. A ref named `AUTO_MERGE` is written, pointing to a tree
|
||||||
|
corresponding to the current content of the working tree (including
|
||||||
|
conflict markers for textual conflicts). Note that this ref is only
|
||||||
|
written when the `ort` merge strategy is used (the default).
|
||||||
|
6. No other changes are made. In particular, the local
|
||||||
|
modifications you had before you started merge will stay the
|
||||||
|
same and the index entries for them stay as they were,
|
||||||
|
i.e. matching `HEAD`.
|
||||||
|
|
||||||
|
If you tried a merge which resulted in complex conflicts and
|
||||||
|
want to start over, you can recover with `git merge --abort`.
|
||||||
|
|
||||||
|
MERGING TAG
|
||||||
|
-----------
|
||||||
|
|
||||||
|
When merging an annotated (and possibly signed) tag, Git always
|
||||||
|
creates a merge commit even if a fast-forward merge is possible, and
|
||||||
|
the commit message template is prepared with the tag message.
|
||||||
|
Additionally, if the tag is signed, the signature check is reported
|
||||||
|
as a comment in the message template. See also linkgit:git-tag[1].
|
||||||
|
|
||||||
|
When you want to just integrate with the work leading to the commit
|
||||||
|
that happens to be tagged, e.g. synchronizing with an upstream
|
||||||
|
release point, you may not want to make an unnecessary merge commit.
|
||||||
|
|
||||||
|
In such a case, you can "unwrap" the tag yourself before feeding it
|
||||||
|
to `git merge`, or pass `--ff-only` when you do not have any work on
|
||||||
|
your own. e.g.
|
||||||
|
|
||||||
|
----
|
||||||
|
git fetch origin
|
||||||
|
git merge v1.2.3^0
|
||||||
|
git merge --ff-only v1.2.3
|
||||||
|
----
|
||||||
|
|
||||||
|
HOW CONFLICTS ARE PRESENTED
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
During a merge, the working tree files are updated to reflect the result
|
||||||
|
of the merge. Among the changes made to the common ancestor's version,
|
||||||
|
non-overlapping ones (that is, you changed an area of the file while the
|
||||||
|
other side left that area intact, or vice versa) are incorporated in the
|
||||||
|
final result verbatim. When both sides made changes to the same area,
|
||||||
|
however, Git cannot randomly pick one side over the other, and asks you to
|
||||||
|
resolve it by leaving what both sides did to that area.
|
||||||
|
|
||||||
|
By default, Git uses the same style as the one used by the "merge" program
|
||||||
|
from the RCS suite to present such a conflicted hunk, like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
Here are lines that are either unchanged from the common
|
||||||
|
ancestor, or cleanly resolved because only one side changed,
|
||||||
|
or cleanly resolved because both sides changed the same way.
|
||||||
|
<<<<<<< yours:sample.txt
|
||||||
|
Conflict resolution is hard;
|
||||||
|
let's go shopping.
|
||||||
|
=======
|
||||||
|
Git makes conflict resolution easy.
|
||||||
|
>>>>>>> theirs:sample.txt
|
||||||
|
And here is another line that is cleanly resolved or unmodified.
|
||||||
|
------------
|
||||||
|
|
||||||
|
The area where a pair of conflicting changes happened is marked with markers
|
||||||
|
+<<<<<<<+, `=======`, and +>>>>>>>+. The part before the `=======`
|
||||||
|
is typically your side, and the part afterwards is typically their side.
|
||||||
|
|
||||||
|
The default format does not show what the original said in the conflicting
|
||||||
|
area. You cannot tell how many lines are deleted and replaced with
|
||||||
|
Barbie's remark on your side. The only thing you can tell is that your
|
||||||
|
side wants to say it is hard and you'd prefer to go shopping, while the
|
||||||
|
other side wants to claim it is easy.
|
||||||
|
|
||||||
|
An alternative style can be used by setting the `merge.conflictStyle`
|
||||||
|
configuration variable to either `diff3` or `zdiff3`. In `diff3`
|
||||||
|
style, the above conflict may look like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
Here are lines that are either unchanged from the common
|
||||||
|
ancestor, or cleanly resolved because only one side changed,
|
||||||
|
<<<<<<< yours:sample.txt
|
||||||
|
or cleanly resolved because both sides changed the same way.
|
||||||
|
Conflict resolution is hard;
|
||||||
|
let's go shopping.
|
||||||
|
||||||| base:sample.txt
|
||||||
|
or cleanly resolved because both sides changed identically.
|
||||||
|
Conflict resolution is hard.
|
||||||
|
=======
|
||||||
|
or cleanly resolved because both sides changed the same way.
|
||||||
|
Git makes conflict resolution easy.
|
||||||
|
>>>>>>> theirs:sample.txt
|
||||||
|
And here is another line that is cleanly resolved or unmodified.
|
||||||
|
------------
|
||||||
|
|
||||||
|
while in `zdiff3` style, it may look like this:
|
||||||
|
|
||||||
|
------------
|
||||||
|
Here are lines that are either unchanged from the common
|
||||||
|
ancestor, or cleanly resolved because only one side changed,
|
||||||
|
or cleanly resolved because both sides changed the same way.
|
||||||
|
<<<<<<< yours:sample.txt
|
||||||
|
Conflict resolution is hard;
|
||||||
|
let's go shopping.
|
||||||
|
||||||| base:sample.txt
|
||||||
|
or cleanly resolved because both sides changed identically.
|
||||||
|
Conflict resolution is hard.
|
||||||
|
=======
|
||||||
|
Git makes conflict resolution easy.
|
||||||
|
>>>>>>> theirs:sample.txt
|
||||||
|
And here is another line that is cleanly resolved or unmodified.
|
||||||
|
------------
|
||||||
|
|
||||||
|
In addition to the +<<<<<<<+, `=======`, and +>>>>>>>+ markers, it uses
|
||||||
|
another +|||||||+ marker that is followed by the original text. You can
|
||||||
|
tell that the original just stated a fact, and your side simply gave in to
|
||||||
|
that statement and gave up, while the other side tried to have a more
|
||||||
|
positive attitude. You can sometimes come up with a better resolution by
|
||||||
|
viewing the original.
|
||||||
|
|
||||||
|
|
||||||
|
HOW TO RESOLVE CONFLICTS
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
After seeing a conflict, you can do two things:
|
||||||
|
|
||||||
|
* Decide not to merge. The only clean-ups you need are to reset
|
||||||
|
the index file to the `HEAD` commit to reverse 2. and to clean
|
||||||
|
up working tree changes made by 2. and 3.; `git merge --abort`
|
||||||
|
can be used for this.
|
||||||
|
|
||||||
|
* Resolve the conflicts. Git will mark the conflicts in
|
||||||
|
the working tree. Edit the files into shape and
|
||||||
|
`git add` them to the index. Use `git commit` or
|
||||||
|
`git merge --continue` to seal the deal. The latter command
|
||||||
|
checks whether there is a (interrupted) merge in progress
|
||||||
|
before calling `git commit`.
|
||||||
|
|
||||||
|
You can work through the conflict with a number of tools:
|
||||||
|
|
||||||
|
* Use a mergetool. `git mergetool` to launch a graphical
|
||||||
|
mergetool which will work through the merge with you.
|
||||||
|
|
||||||
|
* Look at the diffs. `git diff` will show a three-way diff,
|
||||||
|
highlighting changes from both the `HEAD` and `MERGE_HEAD`
|
||||||
|
versions. `git diff AUTO_MERGE` will show what changes you've
|
||||||
|
made so far to resolve textual conflicts.
|
||||||
|
|
||||||
|
* Look at the diffs from each branch. `git log --merge -p <path>`
|
||||||
|
will show diffs first for the `HEAD` version and then the
|
||||||
|
`MERGE_HEAD` version.
|
||||||
|
|
||||||
|
* Look at the originals. `git show :1:filename` shows the
|
||||||
|
common ancestor, `git show :2:filename` shows the `HEAD`
|
||||||
|
version, and `git show :3:filename` shows the `MERGE_HEAD`
|
||||||
|
version.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Merge branches `fixes` and `enhancements` on top of
|
||||||
|
the current branch, making an octopus merge:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git merge fixes enhancements
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Merge branch `obsolete` into the current branch, using `ours`
|
||||||
|
merge strategy:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git merge -s ours obsolete
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Merge branch `maint` into the current branch, but do not make
|
||||||
|
a new commit automatically:
|
||||||
|
+
|
||||||
|
------------------------------------------------
|
||||||
|
$ git merge --no-commit maint
|
||||||
|
------------------------------------------------
|
||||||
|
+
|
||||||
|
This can be used when you want to include further changes to the
|
||||||
|
merge, or want to write your own merge commit message.
|
||||||
|
+
|
||||||
|
You should refrain from abusing this option to sneak substantial
|
||||||
|
changes into a merge commit. Small fixups like bumping
|
||||||
|
release/version name would be acceptable.
|
||||||
|
|
||||||
|
|
||||||
|
include::merge-strategies.adoc[]
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
`branch.<name>.mergeOptions`::
|
||||||
|
Sets default options for merging into branch _<name>_. The syntax and
|
||||||
|
supported options are the same as those of `git merge`, but option
|
||||||
|
values containing whitespace characters are currently not supported.
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-rest.adoc[]
|
||||||
|
|
||||||
|
include::config/merge.adoc[]
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
|
||||||
|
linkgit:gitattributes[5],
|
||||||
|
linkgit:git-reset[1],
|
||||||
|
linkgit:git-diff[1], linkgit:git-ls-files[1],
|
||||||
|
linkgit:git-add[1], linkgit:git-rm[1],
|
||||||
|
linkgit:git-mergetool[1]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
53
app/src/main/assets/manpages/git-mergetool--lib.txt
Normal file
53
app/src/main/assets/manpages/git-mergetool--lib.txt
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
git-mergetool{litdd}lib(1)
|
||||||
|
==========================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mergetool--lib - Common Git merge tool shell scriptlets
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'TOOL_MODE=(diff|merge) . "$(git --exec-path)/git-mergetool{litdd}lib"'
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This is not a command the end user would want to run. Ever.
|
||||||
|
This documentation is meant for people who are studying the
|
||||||
|
Porcelain-ish scripts and/or are writing new ones.
|
||||||
|
|
||||||
|
The 'git-mergetool{litdd}lib' scriptlet is designed to be sourced (using
|
||||||
|
`.`) by other shell scripts to set up functions for working
|
||||||
|
with Git merge tools.
|
||||||
|
|
||||||
|
Before sourcing 'git-mergetool{litdd}lib', your script must set `TOOL_MODE`
|
||||||
|
to define the operation mode for the functions listed below.
|
||||||
|
'diff' and 'merge' are valid values.
|
||||||
|
|
||||||
|
FUNCTIONS
|
||||||
|
---------
|
||||||
|
get_merge_tool::
|
||||||
|
Returns a merge tool. The return code is 1 if we returned a guessed
|
||||||
|
merge tool, else 0. '$GIT_MERGETOOL_GUI' may be set to 'true' to
|
||||||
|
search for the appropriate guitool.
|
||||||
|
|
||||||
|
get_merge_tool_cmd::
|
||||||
|
Returns the custom command for a merge tool.
|
||||||
|
|
||||||
|
get_merge_tool_path::
|
||||||
|
Returns the custom path for a merge tool.
|
||||||
|
|
||||||
|
initialize_merge_tool::
|
||||||
|
Brings merge tool specific functions into scope so they can be used or
|
||||||
|
overridden.
|
||||||
|
|
||||||
|
run_merge_tool::
|
||||||
|
Launches a merge tool given the tool name and a true/false
|
||||||
|
flag to indicate whether a merge base is present.
|
||||||
|
'$MERGED', '$LOCAL', '$REMOTE', and '$BASE' must be defined
|
||||||
|
for use by the merge tool.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
130
app/src/main/assets/manpages/git-mergetool.txt
Normal file
130
app/src/main/assets/manpages/git-mergetool.txt
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
git-mergetool(1)
|
||||||
|
================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mergetool - Run merge conflict resolution tools to resolve merge conflicts
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[synopsis]
|
||||||
|
git mergetool [--tool=<tool>] [-y | --[no-]prompt] [<file>...]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Use `git mergetool` to run one of several merge utilities to resolve
|
||||||
|
merge conflicts. It is typically run after `git merge`.
|
||||||
|
|
||||||
|
If one or more <file> parameters are given, the merge tool program will
|
||||||
|
be run to resolve differences in each file (skipping those without
|
||||||
|
conflicts). Specifying a directory will include all unresolved files in
|
||||||
|
that path. If no _<file>_ names are specified, `git mergetool` will run
|
||||||
|
the merge tool program on every file with merge conflicts.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`-t <tool>`::
|
||||||
|
`--tool=<tool>`::
|
||||||
|
Use the merge resolution program specified by _<tool>_.
|
||||||
|
Valid values include `emerge`, `gvimdiff`, `kdiff3`,
|
||||||
|
`meld`, `vimdiff`, and `tortoisemerge`. Run `git mergetool --tool-help`
|
||||||
|
for the list of valid _<tool>_ settings.
|
||||||
|
+
|
||||||
|
If a merge resolution program is not specified, `git mergetool`
|
||||||
|
will use the configuration variable `merge.tool`. If the
|
||||||
|
configuration variable `merge.tool` is not set, `git mergetool`
|
||||||
|
will pick a suitable default.
|
||||||
|
+
|
||||||
|
You can explicitly provide a full path to the tool by setting the
|
||||||
|
configuration variable `mergetool.<tool>.path`. For example, you
|
||||||
|
can configure the absolute path to kdiff3 by setting
|
||||||
|
`mergetool.kdiff3.path`. Otherwise, `git mergetool` assumes the
|
||||||
|
tool is available in `$PATH`.
|
||||||
|
+
|
||||||
|
Instead of running one of the known merge tool programs,
|
||||||
|
`git mergetool` can be customized to run an alternative program
|
||||||
|
by specifying the command line to invoke in a configuration
|
||||||
|
variable `mergetool.<tool>.cmd`.
|
||||||
|
+
|
||||||
|
When `git mergetool` is invoked with this tool (either through the
|
||||||
|
`-t` or `--tool` option or the `merge.tool` configuration
|
||||||
|
variable), the configured command line will be invoked with `BASE`
|
||||||
|
set to the name of a temporary file containing the common base for
|
||||||
|
the merge, if available; `LOCAL` set to the name of a temporary
|
||||||
|
file containing the contents of the file on the current branch;
|
||||||
|
`REMOTE` set to the name of a temporary file containing the
|
||||||
|
contents of the file to be merged, and `MERGED` set to the name
|
||||||
|
of the file to which the merge tool should write the result of the
|
||||||
|
merge resolution.
|
||||||
|
+
|
||||||
|
If the custom merge tool correctly indicates the success of a
|
||||||
|
merge resolution with its exit code, then the configuration
|
||||||
|
variable `mergetool.<tool>.trustExitCode` can be set to `true`.
|
||||||
|
Otherwise, `git mergetool` will prompt the user to indicate the
|
||||||
|
success of the resolution after the custom tool has exited.
|
||||||
|
|
||||||
|
`--tool-help`::
|
||||||
|
Print a list of merge tools that may be used with `--tool`.
|
||||||
|
|
||||||
|
`-y`::
|
||||||
|
`--no-prompt`::
|
||||||
|
Don't prompt before each invocation of the merge resolution
|
||||||
|
program.
|
||||||
|
This is the default if the merge resolution program is
|
||||||
|
explicitly specified with the `--tool` option or with the
|
||||||
|
`merge.tool` configuration variable.
|
||||||
|
|
||||||
|
`--prompt`::
|
||||||
|
Prompt before each invocation of the merge resolution program
|
||||||
|
to give the user a chance to skip the path.
|
||||||
|
|
||||||
|
`-g`::
|
||||||
|
`--gui`::
|
||||||
|
When `git-mergetool` is invoked with the `-g` or `--gui` option,
|
||||||
|
the default merge tool will be read from the configured
|
||||||
|
`merge.guitool` variable instead of `merge.tool`. If
|
||||||
|
`merge.guitool` is not set, we will fallback to the tool
|
||||||
|
configured under `merge.tool`. This may be autoselected using
|
||||||
|
the configuration variable `mergetool.guiDefault`.
|
||||||
|
|
||||||
|
`--no-gui`::
|
||||||
|
This overrides a previous `-g` or `--gui` setting or
|
||||||
|
`mergetool.guiDefault` configuration and reads the default merge
|
||||||
|
tool from the configured `merge.tool` variable.
|
||||||
|
|
||||||
|
`-O<orderfile>`::
|
||||||
|
Process files in the order specified in the
|
||||||
|
_<orderfile>_, which has one shell glob pattern per line.
|
||||||
|
This overrides the `diff.orderFile` configuration variable
|
||||||
|
(see linkgit:git-config[1]). To cancel `diff.orderFile`,
|
||||||
|
use `-O/dev/null`.
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
:git-mergetool: 1
|
||||||
|
|
||||||
|
include::includes/cmd-config-section-all.adoc[]
|
||||||
|
|
||||||
|
include::config/mergetool.adoc[]
|
||||||
|
|
||||||
|
TEMPORARY FILES
|
||||||
|
---------------
|
||||||
|
`git mergetool` creates `*.orig` backup files while resolving merges.
|
||||||
|
These are safe to remove once a file has been merged and its
|
||||||
|
`git mergetool` session has completed.
|
||||||
|
|
||||||
|
Setting the `mergetool.keepBackup` configuration variable to `false`
|
||||||
|
causes `git mergetool` to automatically remove the backup files as files
|
||||||
|
are successfully merged.
|
||||||
|
|
||||||
|
BACKEND SPECIFIC HINTS
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
vimdiff
|
||||||
|
~~~~~~~
|
||||||
|
include::mergetools/vimdiff.adoc[]
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
66
app/src/main/assets/manpages/git-mktag.txt
Normal file
66
app/src/main/assets/manpages/git-mktag.txt
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
git-mktag(1)
|
||||||
|
============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mktag - Creates a tag object with extra validation
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git mktag'
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Reads a tag's contents on standard input and creates a tag object. The
|
||||||
|
output is the new tag's <object> identifier.
|
||||||
|
|
||||||
|
This command is mostly equivalent to linkgit:git-hash-object[1]
|
||||||
|
invoked with `-t tag -w --stdin`. I.e. both of these will create and
|
||||||
|
write a tag found in `my-tag`:
|
||||||
|
|
||||||
|
git mktag <my-tag
|
||||||
|
git hash-object -t tag -w --stdin <my-tag
|
||||||
|
|
||||||
|
The difference is that mktag will die before writing the tag if the
|
||||||
|
tag doesn't pass a linkgit:git-fsck[1] check.
|
||||||
|
|
||||||
|
The "fsck" check done by mktag is stricter than what linkgit:git-fsck[1]
|
||||||
|
would run by default in that all `fsck.<msg-id>` messages are promoted
|
||||||
|
from warnings to errors (so e.g. a missing "tagger" line is an error).
|
||||||
|
|
||||||
|
Extra headers in the object are also an error under mktag, but ignored
|
||||||
|
by linkgit:git-fsck[1]. This extra check can be turned off by setting
|
||||||
|
the appropriate `fsck.<msg-id>` variable:
|
||||||
|
|
||||||
|
git -c fsck.extraHeaderEntry=ignore mktag <my-tag-with-headers
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--strict::
|
||||||
|
By default mktag turns on the equivalent of
|
||||||
|
linkgit:git-fsck[1] `--strict` mode. Use `--no-strict` to
|
||||||
|
disable it.
|
||||||
|
|
||||||
|
Tag Format
|
||||||
|
----------
|
||||||
|
A tag signature file, to be fed to this command's standard input,
|
||||||
|
has a very simple fixed format: four lines of
|
||||||
|
|
||||||
|
object <hash>
|
||||||
|
type <typename>
|
||||||
|
tag <tagname>
|
||||||
|
tagger <tagger>
|
||||||
|
|
||||||
|
followed by some 'optional' free-form message (some tags created
|
||||||
|
by older Git may not have a `tagger` line). The message, when it
|
||||||
|
exists, is separated by a blank line from the header. The
|
||||||
|
message part may contain a signature that Git itself doesn't
|
||||||
|
care about, but that can be verified with gpg.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
40
app/src/main/assets/manpages/git-mktree.txt
Normal file
40
app/src/main/assets/manpages/git-mktree.txt
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
git-mktree(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mktree - Build a tree-object from ls-tree formatted text
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git mktree' [-z] [--missing] [--batch]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Reads standard input in non-recursive `ls-tree` output format, and creates
|
||||||
|
a tree object. The order of the tree entries is normalized by mktree so
|
||||||
|
pre-sorting the input is not required. The object name of the tree object
|
||||||
|
built is written to the standard output.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-z::
|
||||||
|
Read the NUL-terminated `ls-tree -z` output instead.
|
||||||
|
|
||||||
|
--missing::
|
||||||
|
Allow missing objects. The default behaviour (without this option)
|
||||||
|
is to verify that each tree entry's hash identifies an existing
|
||||||
|
object. This option has no effect on the treatment of gitlink entries
|
||||||
|
(aka "submodules") which are always allowed to be missing.
|
||||||
|
|
||||||
|
--batch::
|
||||||
|
Allow building of more than one tree object before exiting. Each
|
||||||
|
tree is separated by a single blank line. The final newline is
|
||||||
|
optional. Note - if the `-z` option is used, lines are terminated
|
||||||
|
with NUL.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
177
app/src/main/assets/manpages/git-multi-pack-index.txt
Normal file
177
app/src/main/assets/manpages/git-multi-pack-index.txt
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
git-multi-pack-index(1)
|
||||||
|
=======================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-multi-pack-index - Write and verify multi-pack-indexes
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git multi-pack-index' [<options>] write [--preferred-pack=<pack>]
|
||||||
|
[--[no-]bitmap] [--[no-]incremental] [--[no-]stdin-packs]
|
||||||
|
[--refs-snapshot=<path>]
|
||||||
|
'git multi-pack-index' [<options>] compact [--[no-]incremental]
|
||||||
|
[--[no-]bitmap] <from> <to>
|
||||||
|
'git multi-pack-index' [<options>] verify
|
||||||
|
'git multi-pack-index' [<options>] expire
|
||||||
|
'git multi-pack-index' [<options>] repack [--batch-size=<size>]
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Write or verify a multi-pack-index (MIDX) file.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
The following command-line options are applicable to all sub-commands:
|
||||||
|
|
||||||
|
--object-dir=<dir>::
|
||||||
|
Use given directory for the location of Git objects. We check
|
||||||
|
`<dir>/packs/multi-pack-index` for the current MIDX file, and
|
||||||
|
`<dir>/packs` for the pack-files to index.
|
||||||
|
+
|
||||||
|
`<dir>` must be an alternate of the current repository.
|
||||||
|
|
||||||
|
--progress::
|
||||||
|
--no-progress::
|
||||||
|
Turn progress on/off explicitly. If neither is specified, progress is
|
||||||
|
shown if standard error is connected to a terminal. Supported by
|
||||||
|
sub-commands `write`, `verify`, `expire`, and `repack`.
|
||||||
|
|
||||||
|
The following subcommands are available:
|
||||||
|
|
||||||
|
write::
|
||||||
|
Write a new MIDX file. The following options are available for
|
||||||
|
the `write` sub-command:
|
||||||
|
+
|
||||||
|
--
|
||||||
|
--preferred-pack=<pack>::
|
||||||
|
When specified, break ties in favor of this pack when
|
||||||
|
there are additional copies of its objects in other
|
||||||
|
packs. Ties for objects not found in the preferred
|
||||||
|
pack are always resolved in favor of the copy in the
|
||||||
|
pack with the highest mtime. If unspecified, the pack
|
||||||
|
with the lowest mtime is used by default. The
|
||||||
|
preferred pack must have at least one object.
|
||||||
|
|
||||||
|
--[no-]bitmap::
|
||||||
|
Control whether or not a multi-pack bitmap is written.
|
||||||
|
|
||||||
|
--stdin-packs::
|
||||||
|
Write a multi-pack index containing only the set of
|
||||||
|
line-delimited pack index basenames provided over stdin.
|
||||||
|
|
||||||
|
--refs-snapshot=<path>::
|
||||||
|
With `--bitmap`, optionally specify a file which
|
||||||
|
contains a "refs snapshot" taken prior to repacking.
|
||||||
|
+
|
||||||
|
A reference snapshot is composed of line-delimited OIDs corresponding to
|
||||||
|
the reference tips, usually taken by `git repack` prior to generating a
|
||||||
|
new pack. A line may optionally start with a `+` character to indicate
|
||||||
|
that the reference which corresponds to that OID is "preferred" (see
|
||||||
|
linkgit:git-config[1]'s `pack.preferBitmapTips`.)
|
||||||
|
+
|
||||||
|
The file given at `<path>` is expected to be readable, and can contain
|
||||||
|
duplicates. (If a given OID is given more than once, it is marked as
|
||||||
|
preferred if at least one instance of it begins with the special `+`
|
||||||
|
marker).
|
||||||
|
|
||||||
|
--incremental::
|
||||||
|
Write an incremental MIDX file containing only objects
|
||||||
|
and packs not present in an existing MIDX layer.
|
||||||
|
Migrates non-incremental MIDXs to incremental ones when
|
||||||
|
necessary.
|
||||||
|
--
|
||||||
|
|
||||||
|
compact::
|
||||||
|
Write a new MIDX layer containing only objects and packs present
|
||||||
|
in the range `<from>` to `<to>`, where both arguments are
|
||||||
|
checksums of existing layers in the MIDX chain.
|
||||||
|
+
|
||||||
|
--
|
||||||
|
--incremental::
|
||||||
|
Write the result to a MIDX chain instead of writing a
|
||||||
|
stand-alone MIDX.
|
||||||
|
|
||||||
|
--[no-]bitmap::
|
||||||
|
Control whether or not a multi-pack bitmap is written.
|
||||||
|
--
|
||||||
|
+
|
||||||
|
Note that the compact command requires writing a version-2 midx that
|
||||||
|
cannot be read by versions of Git prior to v2.54.
|
||||||
|
|
||||||
|
verify::
|
||||||
|
Verify the contents of the MIDX file.
|
||||||
|
|
||||||
|
expire::
|
||||||
|
Delete the pack-files that are tracked by the MIDX file, but
|
||||||
|
have no objects referenced by the MIDX (with the exception of
|
||||||
|
`.keep` packs and cruft packs). Rewrite the MIDX file afterward
|
||||||
|
to remove all references to these pack-files.
|
||||||
|
+
|
||||||
|
NOTE: this mode is incompatible with incremental MIDX files.
|
||||||
|
|
||||||
|
repack::
|
||||||
|
Create a new pack-file containing objects in small pack-files
|
||||||
|
referenced by the multi-pack-index. If the size given by the
|
||||||
|
`--batch-size=<size>` argument is zero, then create a pack
|
||||||
|
containing all objects referenced by the multi-pack-index. For
|
||||||
|
a non-zero batch size, Select the pack-files by examining packs
|
||||||
|
from oldest-to-newest, computing the "expected size" by counting
|
||||||
|
the number of objects in the pack referenced by the
|
||||||
|
multi-pack-index, then divide by the total number of objects in
|
||||||
|
the pack and multiply by the pack size. We select packs with
|
||||||
|
expected size below the batch size until the set of packs have
|
||||||
|
total expected size at least the batch size, or all pack-files
|
||||||
|
are considered. If only one pack-file is selected, then do
|
||||||
|
nothing. If a new pack-file is created, rewrite the
|
||||||
|
multi-pack-index to reference the new pack-file. A later run of
|
||||||
|
'git multi-pack-index expire' will delete the pack-files that
|
||||||
|
were part of this batch.
|
||||||
|
+
|
||||||
|
If `repack.packKeptObjects` is `false`, then any pack-files with an
|
||||||
|
associated `.keep` file will not be selected for the batch to repack.
|
||||||
|
+
|
||||||
|
NOTE: this mode is incompatible with incremental MIDX files.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Write a MIDX file for the packfiles in the current `.git` directory.
|
||||||
|
+
|
||||||
|
-----------------------------------------------
|
||||||
|
$ git multi-pack-index write
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
* Write a MIDX file for the packfiles in the current `.git` directory with a
|
||||||
|
corresponding bitmap.
|
||||||
|
+
|
||||||
|
-------------------------------------------------------------
|
||||||
|
$ git multi-pack-index write --preferred-pack=<pack> --bitmap
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
* Write a MIDX file for the packfiles in an alternate object store.
|
||||||
|
+
|
||||||
|
-----------------------------------------------
|
||||||
|
$ git multi-pack-index --object-dir <alt> write
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
* Verify the MIDX file for the packfiles in the current `.git` directory.
|
||||||
|
+
|
||||||
|
-----------------------------------------------
|
||||||
|
$ git multi-pack-index verify
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
See link:technical/multi-pack-index.html[The Multi-Pack-Index Design
|
||||||
|
Document] and linkgit:gitformat-pack[5] for more information on the
|
||||||
|
multi-pack-index feature and its file format.
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
68
app/src/main/assets/manpages/git-mv.txt
Normal file
68
app/src/main/assets/manpages/git-mv.txt
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
git-mv(1)
|
||||||
|
=========
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-mv - Move or rename a file, a directory, or a symlink
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
|
||||||
|
[synopsis]
|
||||||
|
git mv [-v] [-f] [-n] [-k] <source> <destination>
|
||||||
|
git mv [-v] [-f] [-n] [-k] <source>... <destination-directory>
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Move or rename a file, directory, or symlink.
|
||||||
|
|
||||||
|
In the first form, it renames _<source>_, which must exist and be either
|
||||||
|
a file, symlink or directory, to _<destination>_.
|
||||||
|
In the second form, _<destination-directory>_ has to be an existing
|
||||||
|
directory; the given sources will be moved into this directory.
|
||||||
|
|
||||||
|
The index is updated after successful completion, but the change must still be
|
||||||
|
committed.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
`-f`::
|
||||||
|
`--force`::
|
||||||
|
Force renaming or moving of a file even if the <destination> exists.
|
||||||
|
`-k`::
|
||||||
|
Skip move or rename actions which would lead to an error
|
||||||
|
condition. An error happens when a source is neither existing nor
|
||||||
|
controlled by Git, or when it would overwrite an existing
|
||||||
|
file unless `-f` is given.
|
||||||
|
`-n`::
|
||||||
|
`--dry-run`::
|
||||||
|
Do nothing; only show what would happen
|
||||||
|
|
||||||
|
`-v`::
|
||||||
|
`--verbose`::
|
||||||
|
Report the names of files as they are moved.
|
||||||
|
|
||||||
|
SUBMODULES
|
||||||
|
----------
|
||||||
|
Moving a submodule using a gitfile (which means they were cloned
|
||||||
|
with a Git version 1.7.8 or newer) will update the gitfile and
|
||||||
|
core.worktree setting to make the submodule work in the new location.
|
||||||
|
It also will attempt to update the `submodule.<name>.path` setting in
|
||||||
|
the linkgit:gitmodules[5] file and stage that file (unless `-n` is used).
|
||||||
|
|
||||||
|
BUGS
|
||||||
|
----
|
||||||
|
Each time a superproject update moves a populated submodule (e.g. when
|
||||||
|
switching between commits before and after the move) a stale submodule
|
||||||
|
checkout will remain in the old location and an empty directory will
|
||||||
|
appear in the new location. To populate the submodule again in the new
|
||||||
|
location the user will have to run "git submodule update"
|
||||||
|
afterwards. Removing the old directory is only safe when it uses a
|
||||||
|
gitfile, as otherwise the history of the submodule will be deleted
|
||||||
|
too. Both steps will be obsolete when recursive submodule update has
|
||||||
|
been implemented.
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
112
app/src/main/assets/manpages/git-name-rev.txt
Normal file
112
app/src/main/assets/manpages/git-name-rev.txt
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
git-name-rev(1)
|
||||||
|
===============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-name-rev - Find symbolic names for given revs
|
||||||
|
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
[verse]
|
||||||
|
'git name-rev' [--tags] [--refs=<pattern>]
|
||||||
|
( --all | --annotate-stdin | <commit-ish>... )
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Finds symbolic names suitable for human digestion for revisions given in any
|
||||||
|
format parsable by 'git rev-parse'.
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
|
||||||
|
--tags::
|
||||||
|
Do not use branch names, but only tags to name the commits
|
||||||
|
|
||||||
|
--refs=<pattern>::
|
||||||
|
Only use refs whose names match a given shell pattern. The pattern
|
||||||
|
can be a branch name, a tag name, or a fully qualified ref name. If
|
||||||
|
given multiple times, use refs whose names match any of the given shell
|
||||||
|
patterns. Use `--no-refs` to clear any previous ref patterns given.
|
||||||
|
|
||||||
|
--exclude=<pattern>::
|
||||||
|
Do not use any ref whose name matches a given shell pattern. The
|
||||||
|
pattern can be one of branch name, tag name or fully qualified ref
|
||||||
|
name. If given multiple times, a ref will be excluded when it matches
|
||||||
|
any of the given patterns. When used together with --refs, a ref will
|
||||||
|
be used as a match only when it matches at least one --refs pattern and
|
||||||
|
does not match any --exclude patterns. Use `--no-exclude` to clear the
|
||||||
|
list of exclude patterns.
|
||||||
|
|
||||||
|
--all::
|
||||||
|
List all commits reachable from all refs
|
||||||
|
|
||||||
|
--annotate-stdin::
|
||||||
|
Transform stdin by substituting all the 40-character SHA-1
|
||||||
|
hexes (say $hex) with "$hex ($rev_name)". When used with
|
||||||
|
--name-only, substitute with "$rev_name", omitting $hex
|
||||||
|
altogether. This option was called `--stdin` in older versions
|
||||||
|
of Git.
|
||||||
|
+
|
||||||
|
For example:
|
||||||
|
+
|
||||||
|
-----------
|
||||||
|
$ cat sample.txt
|
||||||
|
|
||||||
|
An abbreviated revision 2ae0a9cb82 will not be substituted.
|
||||||
|
The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907,
|
||||||
|
while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
|
||||||
|
|
||||||
|
$ git name-rev --annotate-stdin <sample.txt
|
||||||
|
|
||||||
|
An abbreviated revision 2ae0a9cb82 will not be substituted.
|
||||||
|
The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907 (master),
|
||||||
|
while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
|
||||||
|
|
||||||
|
$ git name-rev --name-only --annotate-stdin <sample.txt
|
||||||
|
|
||||||
|
An abbreviated revision 2ae0a9cb82 will not be substituted.
|
||||||
|
The full name after substitution is master,
|
||||||
|
while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
|
||||||
|
-----------
|
||||||
|
|
||||||
|
--name-only::
|
||||||
|
Instead of printing both the SHA-1 and the name, print only
|
||||||
|
the name. If given with --tags the usual tag prefix of
|
||||||
|
"tags/" is also omitted from the name, matching the output
|
||||||
|
of `git-describe` more closely.
|
||||||
|
|
||||||
|
--no-undefined::
|
||||||
|
Die with error code != 0 when a reference is undefined,
|
||||||
|
instead of printing `undefined`.
|
||||||
|
|
||||||
|
--always::
|
||||||
|
Show uniquely abbreviated commit object as fallback.
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Given a commit, find out where it is relative to the local refs. Say somebody
|
||||||
|
wrote you about that fantastic commit 33db5f4d9027a10e477ccf054b2c1ab94f74c85a.
|
||||||
|
Of course, you look into the commit, but that only tells you what happened, but
|
||||||
|
not the context.
|
||||||
|
|
||||||
|
Enter 'git name-rev':
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
|
||||||
|
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940
|
||||||
|
------------
|
||||||
|
|
||||||
|
Now you are wiser, because you know that it happened 940 revisions before v0.99.
|
||||||
|
|
||||||
|
Another nice thing you can do is:
|
||||||
|
|
||||||
|
------------
|
||||||
|
% git log | git name-rev --annotate-stdin
|
||||||
|
------------
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the linkgit:git[1] suite
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user