mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Jens Lehmann](/assets/img/avatar_default.png)
Currently using "git rm" on a submodule removes the submodule's work tree from that of the superproject and the gitlink from the index. But the submodule's section in .gitmodules is left untouched, which is a leftover of the now removed submodule and might irritate users (as opposed to the setting in .git/config, this must stay as a reminder that the user showed interest in this submodule so it will be repopulated later when an older commit is checked out). Let "git rm" help the user by not only removing the submodule from the work tree but by also removing the "submodule.<submodule name>" section from the .gitmodules file and stage both. This doesn't happen when the "--cached" option is used, as it would modify the work tree. This also silently does nothing when no .gitmodules file is found and only issues a warning when it doesn't have a section for this submodule. This is because the user might just use plain gitlinks without the .gitmodules file or has already removed the section by hand before issuing the "git rm" command (in which case the warning reminds him that rm would have done that for him). Only when .gitmodules is found and contains merge conflicts the rm command will fail and tell the user to resolve the conflict before trying again. Also extend the man page to inform the user about this new feature. While at it promote the submodule sub-section to a chapter as it made not much sense under "REMOVING FILES THAT HAVE DISAPPEARED FROM THE FILESYSTEM". In t7610 three uses of "git rm submod" had to be replaced with "git rm --cached submod" because that test expects .gitmodules and the work tree to stay untouched. Also in t7400 the tests for the remaining settings in the .gitmodules file had to be changed to assert that these settings are missing. Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
46 lines
1.9 KiB
C
46 lines
1.9 KiB
C
#ifndef SUBMODULE_H
|
|
#define SUBMODULE_H
|
|
|
|
struct diff_options;
|
|
struct argv_array;
|
|
|
|
enum {
|
|
RECURSE_SUBMODULES_ON_DEMAND = -1,
|
|
RECURSE_SUBMODULES_OFF = 0,
|
|
RECURSE_SUBMODULES_DEFAULT = 1,
|
|
RECURSE_SUBMODULES_ON = 2
|
|
};
|
|
|
|
int is_staging_gitmodules_ok(void);
|
|
int update_path_in_gitmodules(const char *oldpath, const char *newpath);
|
|
int remove_path_from_gitmodules(const char *path);
|
|
void stage_updated_gitmodules(void);
|
|
void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
|
|
const char *path);
|
|
int submodule_config(const char *var, const char *value, void *cb);
|
|
void gitmodules_config(void);
|
|
int parse_submodule_config_option(const char *var, const char *value);
|
|
void handle_ignore_submodules_arg(struct diff_options *diffopt, const char *);
|
|
int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg);
|
|
void show_submodule_summary(FILE *f, const char *path,
|
|
const char *line_prefix,
|
|
unsigned char one[20], unsigned char two[20],
|
|
unsigned dirty_submodule, const char *meta,
|
|
const char *del, const char *add, const char *reset);
|
|
void set_config_fetch_recurse_submodules(int value);
|
|
void check_for_new_submodule_commits(unsigned char new_sha1[20]);
|
|
int fetch_populated_submodules(const struct argv_array *options,
|
|
const char *prefix, int command_line_option,
|
|
int quiet);
|
|
unsigned is_submodule_modified(const char *path, int ignore_untracked);
|
|
int submodule_uses_gitfile(const char *path);
|
|
int ok_to_remove_submodule(const char *path);
|
|
int merge_submodule(unsigned char result[20], const char *path, const unsigned char base[20],
|
|
const unsigned char a[20], const unsigned char b[20], int search);
|
|
int find_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name,
|
|
struct string_list *needs_pushing);
|
|
int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name);
|
|
void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir);
|
|
|
|
#endif
|