aboutsummaryrefslogtreecommitdiff
path: root/Documentation
Commit message (Collapse)AuthorAge
* Merge branch 'dp/filter-branch-prune-empty' into maintJunio C Hamano2017-03-28
|\ | | | | | | | | | | | | | | | | | | | | "git filter-branch --prune-empty" drops a single-parent commit that becomes a no-op, but did not drop a root commit whose tree is empty. * dp/filter-branch-prune-empty: p7000: add test for filter-branch with --prune-empty filter-branch: fix --prune-empty on parentless commits t7003: ensure --prune-empty removes entire branch when applicable t7003: ensure --prune-empty can prune root commit
| * filter-branch: fix --prune-empty on parentless commitsDevin J. Pohly2017-03-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, the git_commit_non_empty_tree function would always pass any commit with no parents to git-commit-tree, regardless of whether the tree was nonempty. The new commit would then be recorded in the filter-branch revision map, and subsequent commits which leave the tree untouched would be correctly filtered. With this change, parentless commits with an empty tree are correctly pruned, and an empty file is recorded in the revision map, signifying that it was rewritten to "no commits." This works naturally with the parent mapping for subsequent commits. Signed-off-by: Devin J. Pohly <djpohly@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Git 2.12.2v2.12.2Junio C Hamano2017-03-24
| | | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Merge branch 'ab/doc-no-option-notation-fix' into maintJunio C Hamano2017-03-24
|\ \ | | | | | | | | | | | | | | | | | | Doc fix. * ab/doc-no-option-notation-fix: doc: change erroneous --[no]-whatever into --[no-]whatever
| * | doc: change erroneous --[no]-whatever into --[no-]whateverÆvar Arnfjörð Bjarmason2017-03-20
| | | | | | | | | | | | | | | | | | | | | | | | Change these two obvious typos to be in line with the rest of the documentation, which uses the correct --[no-]whatever form. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'ab/push-default-doc-fix' into maintJunio C Hamano2017-03-24
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Doc fix. * ab/push-default-doc-fix: push: mention "push.default=tracking" in the documentation
| * | | push: mention "push.default=tracking" in the documentationÆvar Arnfjörð Bjarmason2017-03-20
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change the documentation for push.tracking=* to re-include a mention of what "tracking" does. The "tracking" option was renamed to "upstream" back in 53c4031 ("push.default: Rename 'tracking' to 'upstream'", 2011-02-16), this section was then subsequently rewritten in 87a70e4 ("config doc: rewrite push.default section", 2013-06-19) to remove any mention of "tracking". Maybe we should just warn or die nowadays if this option is in the config, but I had some old config of mine use this option, I'd forgotten that it was a synonym, and nothing in git's documentation mentioned that. That's bad, either we shouldn't support it at all, or we should document what it does. This patch does the latter. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'nd/commit-hook-doc-fix' into maintJunio C Hamano2017-03-24
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Doc fix. * nd/commit-hook-doc-fix: git-commit.txt: list post-rewrite in HOOKS section
| * | | git-commit.txt: list post-rewrite in HOOKS sectionNguyễn Thái Ngọc Duy2017-03-20
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The hook was added in a86ed83cce (Merge branch 'tr/notes-display' - 2010-03-24), which updated githooks.txt but not git-commit.txt. git-commit.txt was later updated in e858af6d50 (commit: document a couple of options - 2012-06-08). Since this commit focused on command line options, this section was probably forgotten. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Prepare for 2.12.2Junio C Hamano2017-03-21
| | | | | | | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'dt/gc-ignore-old-gc-logs' into maintJunio C Hamano2017-03-21
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A "gc.log" file left by a backgrounded "gc --auto" disables further automatic gc; it has been taught to run at least once a day (by default) by ignoring a stale "gc.log" file that is too old. * dt/gc-ignore-old-gc-logs: gc: ignore old gc.log files
| * | | gc: ignore old gc.log filesDavid Turner2017-02-13
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A server can end up in a state where there are lots of unreferenced loose objects (say, because many users are doing a bunch of rebasing and pushing their rebased branches). Running "git gc --auto" in this state would cause a gc.log file to be created, preventing future auto gcs, causing pack files to pile up. Since many git operations are O(n) in the number of pack files, this would lead to poor performance. Git should never get itself into a state where it refuses to do any maintenance, just because at some point some piece of the maintenance didn't make progress. Teach Git to ignore gc.log files which are older than (by default) one day old, which can be tweaked via the gc.logExpiry configuration variable. That way, these pack files will get cleaned up, if necessary, at least once per day. And operators who find a need for more-frequent gcs can adjust gc.logExpiry to meet their needs. There is also some cleanup: a successful manual gc, or a warning-free auto gc with an old log file, will remove any old gc.log files. It might still happen that manual intervention is required (e.g. because the repo is corrupt), but at the very least it won't be because Git is too dumb to try again. Signed-off-by: David Turner <dturner@twosigma.com> Helped-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'ps/docs-diffcore' into maintJunio C Hamano2017-03-21
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc update. * ps/docs-diffcore: docs/diffcore: unquote "Complete Rewrites" in headers docs/diffcore: fix grammar in diffcore-rename header
| * | | docs/diffcore: unquote "Complete Rewrites" in headersPatrick Steinhardt2017-02-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The gitdiffcore documentation quotes the term "Complete Rewrites" in headers for no real gain. This would make sense if the term could be easily confused if not properly grouped together. But actually, the term is quite obvious and thus does not really need any quoting, especially regarding that it is not used anywhere else. But more importanly, this brings up a bug when rendering man pages: when trying to render quotes inside of a section header, we end up with quotes which have been misaligned to the end of line. E.g. diffcore-break: For Splitting Up Complete Rewrites -------------------------------------------------- renders as DIFFCORE-BREAK: FOR SPLITTING UP COMPLETE REWRITES"" , which is obviously wrong. While this is fixable for the man pages by using double-quotes (e.g. ""COMPLETE REWRITES""), this again breaks it for our generated HTML pages. So fix the issue by simply dropping quotes inside of section headers, which is currently only done for the term "Complete Rewrites". Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
| * | | docs/diffcore: fix grammar in diffcore-rename headerPatrick Steinhardt2017-02-28
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | Git 2.12.1v2.12.1Junio C Hamano2017-03-20
| |_|/ |/| | | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Preparing for 2.12.1Junio C Hamano2017-03-16
|/ / | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Git 2.12v2.12.0Junio C Hamano2017-02-24
| | | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Merge branch 'ps/doc-gc-aggressive-depth-update'Junio C Hamano2017-02-24
|\ \ | | | | | | | | | | | | | | | | | | Doc update. * ps/doc-gc-aggressive-depth-update: docs/git-gc: fix default value for `--aggressiveDepth`
| * | docs/git-gc: fix default value for `--aggressiveDepth`Patrick Steinhardt2017-02-24
| |/ | | | | | | | | | | | | | | | | | | | | In commit 07e7dbf0d (gc: default aggressive depth to 50, 2016-08-11), the default aggressive depth of git-gc has been changed to 50. While git-config(1) has been updated to represent the new default value, git-gc(1) still mentions the old value. This patch fixes it. Signed-off-by: Patrick Steinhardt <ps@pks.im> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | Merge branch 'bc/worktree-doc-fix-detached'Junio C Hamano2017-02-24
|\ \ | | | | | | | | | | | | | | | | | | Doc update. * bc/worktree-doc-fix-detached: Documentation: correctly spell git worktree --detach
| * | Documentation: correctly spell git worktree --detachbrian m. carlson2017-02-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | The option is “--detach”, but we accidentally spelled it “--detached” at one point in the man page. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Reported-by: Casey Rodarmor <casey@rodarmor.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'dr/doc-check-ref-format-normalize'Junio C Hamano2017-02-24
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Doc update. * dr/doc-check-ref-format-normalize: git-check-ref-format: clarify documentation for --normalize
| * | | git-check-ref-format: clarify documentation for --normalizeDamien Regad2017-02-21
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | Use of 'iff' may be confusing to people not familiar with this term. Improving the --normalize option's documentation to remove the use of 'iff', and clearly describe what happens when the condition is not met. Signed-off-by: Damien Regad <dregad@mantisbt.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'gp/document-dotfiles-in-templates-are-not-copied'Junio C Hamano2017-02-24
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Doc update. * gp/document-dotfiles-in-templates-are-not-copied: init: document dotfiles exclusion on template copy
| * | | init: document dotfiles exclusion on template copyGrégoire Paris2017-02-17
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Not just . and .., but any path that begins with dot is not copied when copying the template directory to a new repository. You can customize the template directory, copying some dotfiles might make sense, but it's actually a good thing not to, because you would not want to have your git directory copied in every git directory that is created should you decide to put your template directory under version control, for example. Plus, it might be used as a feature by people who would want to exclude some files. Signed-off-by: Grégoire Paris <postmaster@greg0ire.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Merge branch 'bc/blame-doc-fix'Junio C Hamano2017-02-24
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Doc update. * bc/blame-doc-fix: Documentation: use brackets for optional arguments
| * | | Documentation: use brackets for optional argumentsbrian m. carlson2017-02-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation for git blame used vertical bars for optional arguments to -M and -C, which is unusual and potentially confusing. Since most man pages use brackets for optional items, and that's consistent with how we document the same options for git diff and friends, use brackets here, too. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | Hopefully the final batch of mini-topics before the finalJunio C Hamano2017-02-16
| | | | | | | | | | | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | Merge branch 'dp/submodule-doc-markup-fix'Junio C Hamano2017-02-16
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc fix. * dp/submodule-doc-markup-fix: config.txt: fix formatting of submodule.alternateErrorStrategy section
| * | | | config.txt: fix formatting of submodule.alternateErrorStrategy sectionDavid Pursehouse2017-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add missing `::` after the title. Signed-off-by: David Pursehouse <dpursehouse@collab.net> Acked-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | Merge branch 'jk/reset-to-break-a-commit-doc-updated'Junio C Hamano2017-02-16
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc update. * jk/reset-to-break-a-commit-doc-updated: reset: add an example of how to split a commit into two
| * | | | | reset: add an example of how to split a commit into twoJacob Keller2017-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is often useful to break a commit into multiple parts that are more logical separations. This can be tricky to learn how to do without the brute-force method if re-writing code or commit messages from scratch. Add a section to the git-reset documentation which shows an example process for how to use git add -p and git commit -c HEAD@{1} to interactively break a commit apart and re-use the original commit message as a starting point when making the new commit message. Signed-off-by: Jacob Keller <jacob.keller@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | Merge branch 'jk/reset-to-break-a-commit-doc'Junio C Hamano2017-02-16
|\ \ \ \ \ \ | |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc update. * jk/reset-to-break-a-commit-doc: Revert "reset: add an example of how to split a commit into two"
| * | | | | Revert "reset: add an example of how to split a commit into two"Junio C Hamano2017-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 7326451bedaa67d29afe02184b166e28d9393c91; a better rewrite will be queued separately.
* | | | | | A bit more for -rc2Junio C Hamano2017-02-15
| | | | | |
* | | | | | Merge branch 'tg/stash-doc-cleanup'Junio C Hamano2017-02-15
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation explained what "git stash" does to the working tree (after stashing away the local changes) in terms of "reset --hard", which was exposing an unnecessary implementation detail. * tg/stash-doc-cleanup: Documentation/stash: remove mention of git reset --hard
| * | | | | | Documentation/stash: remove mention of git reset --hardThomas Gummerer2017-02-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't mention git reset --hard in the documentation for git stash save. It's an implementation detail that doesn't matter to the end user and thus shouldn't be exposed to them. In addition it's not quite true for git stash -p, and will not be true when a filename argument to limit the stash to a few files is introduced. Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | | Merge branch 'jk/doc-submodule-markup-fix'Junio C Hamano2017-02-15
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc markup fix. * jk/doc-submodule-markup-fix: docs/git-submodule: fix unbalanced quote
| * | | | | | | docs/git-submodule: fix unbalanced quoteJeff King2017-02-13
| | |_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation gives an example of the submodule foreach command that uses both backticks and single-quotes. We stick the whole thing inside "+" markers to make it monospace, but the inside punctuation still needs escaping. We handle the backticks with "{backtick}", and use backslash-escaping for the single-quotes. But we missed the escaping on the second quote. Fortunately, asciidoc renders this unbalanced quote as we want (showing the quote), but asciidoctor does not. We could fix it by adding the missing backslash. However, let's take a step back. Even when rendered correctly, it's hard to read a long command stuck into the middle of a paragraph, and the important punctuation is hard to notice. Let's instead bump it into its own single-line code block. That makes both the source and the rendered result more readable, and as a bonus we don't have to worry about quoting at all. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | | Merge branch 'jk/doc-remote-helpers-markup-fix'Junio C Hamano2017-02-15
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc markup fix. * jk/doc-remote-helpers-markup-fix: docs/gitremote-helpers: fix unbalanced quotes
| * | | | | | | docs/gitremote-helpers: fix unbalanced quotesJeff King2017-02-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Each of these options is missing the closing single-quote on the option name. This understandably confuses asciidoc, which ends up rendering a stray quote, like: option cloning {'true|false} Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | | | Merge branch 'sb/doc-unify-bottom'Junio C Hamano2017-02-15
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc clean-up. * sb/doc-unify-bottom: Documentation: unify bottom "part of git suite" lines
| * | | | | | | | Documentation: unify bottom "part of git suite" linesStefan Beller2017-02-09
| | |_|_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We currently have 168 man pages that mention they are part of Git, you can check yourself easily via: $ git grep "Part of the linkgit:git\[1\] suite" |wc -l 168 However some have a trailing period, i.e. $ git grep "Part of the linkgit:git\[1\] suite." |wc -l 8 Unify the bottom line in all man pages to not end with a period. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | | | Merge branch 'sb/push-options-via-transport'Junio C Hamano2017-02-15
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The push-options given via the "--push-options" option were not passed through to external remote helpers such as "smart HTTP" that are invoked via the transport helper. * sb/push-options-via-transport: push options: pass push options to the transport helper
| * | | | | | | | push options: pass push options to the transport helperStefan Beller2017-02-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When using non-builtin protocols relying on a transport helper (such as http), push options are not propagated to the helper. The user could ask for push options and a push would seemingly succeed, but the push options would never be transported to the server, misleading the users expectation. Fix this by propagating the push options to the transport helper. This is only addressing the first issue of (1) the helper protocol does not propagate push-option (2) the http helper is not prepared to handle push-option Once we fix (2), the http transport helper can make use of push options as well, but that happens as a follow up. (1) is a bug fix, whereas (2) is a feature, which is why we only do (1) here. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | | | | Merge branch 'sb/submodule-doc'Junio C Hamano2017-02-15
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doc updates. * sb/submodule-doc: submodule update documentation: don't repeat ourselves submodule documentation: add options to the subcommand
| * | | | | | | | | submodule update documentation: don't repeat ourselvesStefan Beller2017-01-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation for the `git submodule update` command, repeats itself for each update option, "This is done when <option> is given, or no option is given and `submodule.<name>.update` is set to <string>. Avoid these repetitive clauses by stating the command line options take precedence over configured options. Also add 'none' to the list of options instead of mentioning it in the following running text and split the list into two parts, one that is accessible via the command line and one that is only reachable via the configuration variables. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
| * | | | | | | | | submodule documentation: add options to the subcommandStefan Beller2017-01-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When reading up on a subcommand of `git submodule <subcommand>`, it is convenient to have its options nearby and not just at the top of the man page. Add the options to each subcommand. While at it, also document the `--checkout` option for `update`. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | | | | | | | | Git 2.12-rc1v2.12.0-rc1Junio C Hamano2017-02-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>